- Calling python from a c++ program for distribution
- 6 Answers 6
- How to control a Windows application from Python
- 3 Answers 3
- How to use subprocess.call to run a Windows program
- 1 Answer 1
- How do I run a Python program in the Command Prompt in Windows 7?
- 23 Answers 23
- Running Python scripts conveniently under Windows
- Making sure Windows can find the Python interpreter
- Associating Python with .py and .pyc
- Omitting the .py extension (editing PATHEXT)
- Adding scripts to the system PATH
- Running directly without tweaking the PATH
- Creating shortcuts or batch files
- Advanced: appending to PYTHONPATH
Calling python from a c++ program for distribution
I would like to call python script files from my c++ program.
I am not sure that the people I will distribute to will have python installed.
Basically I’m looking for a .lib file that I can use that has an Apache like distribution license.
6 Answers 6
Boost has a python interface library which could help you.
I would like to call python script files from my c++ program.
This means that you want to embed Python in your C++ application. As mentioned in Embedding Python in Another Application:
Embedding Python is similar to extending it, but not quite. The difference is that when you extend Python, the main program of the application is still the Python interpreter, while if you embed Python, the main program may have nothing to do with Python — instead, some parts of the application occasionally call the Python interpreter to run some Python code.
I suggest that you first go through Embedding Python in Another Application. Then refer the following examples
If you like Boost.Python, you may visit the following links:
Interestingly, nobody has mentioned pybind11, yet. From their documentation:
pybind11 is a lightweight header-only library that exposes C++ types in Python and vice versa, mainly to create Python bindings of existing C++ code. Its goals and syntax are similar to the excellent Boost.Python library by David Abrahams: to minimize boilerplate code in traditional extension modules by inferring type information using compile-time introspection. [. ] Since its creation, this library has grown beyond Boost.Python in many ways, leading to dramatically simpler binding code in many common situations.
Concretely, calling into a Python function (called embedding) is as simple as this (taken from the documentation):
Use system call to run a python script from C++
Embeding the Python interpreter inside your C++ app will let you run Python programs using your application run Python scripts. It will also make it easier possible for those scripts to call C++ functions in your application. If this is what you want then the Boost library mentioned previously may be what you want to make it easier to create the link. In the past I have used SWIG to generate Python interfaces to C++ code. It was not clear from your question whether you wanted the Python scripts to call your C++ program or whether you just wanted the C++ to call Python.
Many of the Python functions use modules which are not built into the Python interpreter. If your Python scripts call these functions then you will either need to have your users install Python or include the python runtime files with your application. It will depend on what modules you import in you Python scripts.
Boost is probably the best choice, however if you’re wanting something that’s more standalone, and if this is for use with Windows (which seems feasible given that they are the people least likely to have Python installed), then you can use py2exe to create a DLL with entry points suitable for COM objects. You can then interface with the library via COM. (Obviously this is not at all useful as a cross-platform solution).
How to control a Windows application from Python
I have the application installed on my windows PC, I want to launch that application using python and select dropdown options and do some other activities in that application.
I was able to launch the application using the os.system command, but I am not able to proceed further.
I want my program to do things like: * select from a dropdown menu * click on a button
How can my application control the user interface of another application?
3 Answers 3
Normally, an application exposes a user interface (UI) for users, and an application programming interface (API) for programming.
- A human being uses keyboard and mouse to work with the user interface (UI)
- An application uses programming to work with the application programming interface (API)
The UI is designed for humans, and the API is designed for computers.
It is sometimes possible to use programming to control the user interface of another program — so your program acts as if it were using the keyboard and mouse. This technique is often called «UI automation«, and programs that do it are sometimes called «robots».
It’s a big topic, and it can be quite complex. It’s almost always better to use an API instead if you can: it’s faster, simpler, more reliable.
If you do need to use UI automation, there are a few different tools that can help.
You are asking about Python, so here are a few UI automation tools that work with Python:
- AutoIT is a standalone product, but you can use Python to script it.
- PyWinAuto is designed for use from Python.
- Sikuli uses computer vision to find parts of the screen. I believe it comes with a recording tool as well.
Just to repeat: UI automation is weird and hard. If you can possibly use an API instead, your life will be much easier.
How to use subprocess.call to run a Windows program
I’m trying to run a psql command in a Python script, with the subprocess command.
I use a Windows environment and the psql command aims to restore a database located in a remote Linux server.
The snippet is this one :
This does not work and the console tells that the specified file can’t be found.
Any help would be greatly appreciated !
Thanks !
1 Answer 1
Yeah, your problem is definitely your paths. I went through the hassle of installing Python on Windows 10 and created these scripts:
example.bat
example.py
Console
As you can see, you do not need to pass shell=True , or split your command into a list.
If you look closely at the documentation for subprocess.call , you will see this (emphasis added):
The arguments shown above are merely some common ones. The full function signature is the same as that of the Popen constructor — this function passes all supplied arguments other than timeout directly through to that interface.
If you look closely the documentation for subprocess.Popen , you will see this (emphasis added):
On Windows, if args is a sequence, it will be converted to a string in a manner described in Converting an argument sequence to a string on Windows. This is because the underlying CreateProcess() operates on strings.
Any advice about splitting your arguments into a list, or passing shell=True , only applies to POSIX, with one exception:
How do I run a Python program in the Command Prompt in Windows 7?
I’m trying to figure out how to run Python programs with the Command Prompt on Windows 7. (I should have figured this out by now. )
When I typed «python» into the command prompt, I got the following error:
‘python’ is not recognized as an internal or external command, operable program or batch file.
It was somewhat helpful, but the tutorial was written for Windows 2000 and older, so it was minimally helpful for my Windows 7 machine. I attempted the following:
For older versions of Windows the easiest way to do this is to edit the C:\AUTOEXEC.BAT >file. You would want to add a line like the following to AUTOEXEC.BAT:
This file did not exist on my machine (unless I’m mistaken).
In order to run programs, your operating system looks in various places, and tries to match the name of the program / command you typed with some programs along the way.
control panel > system > advanced > |Environmental Variables| > system variables -> Path
this needs to include: C:\Python26; (or equivalent). If you put it at the front, it will be the first place looked. You can also add it at the end, which is possibly saner.
Then restart your prompt, and try typing ‘python’. If it all worked, you should get a «>>>» prompt.
This was relevant enough for Windows 7, and I made my way to the System Variables. I added a variable «python» with the value «C:\Python27»
I continued to get the error, even after restarting my computer.
Anyone know how to fix this?
23 Answers 23
You need to add C:\Python27 to your system PATH variable, not a new variable named «python».
Find the system PATH environment variable, and append to it a ; (which is the delimiter) and the path to the directory containing python.exe (e.g. C:\Python27 ). See below for exact steps.
The PATH environment variable lists all the locations that Windows (and cmd.exe ) will check when given the name of a command, e.g. «python» (it also uses the PATHEXT variable for a list of executable file extensions to try). The first executable file it finds on the PATH with that name is the one it starts.
Note that after changing this variable, there is no need to restart Windows, but only new instances of cmd.exe will have the updated PATH. You can type set PATH at the command prompt to see what the current value is.
Exact steps for adding Python to the path on Windows 7+:
- Computer -> System Properties (or Win+Break ) -> Advanced System Settings
- Click the Environment variables. button (in the Advanced tab)
- Edit PATH and append ;C:\Python27 to the end (substitute your Python version)
- Click OK. Note that changes to the PATH are only reflected in command prompts opened after the change took place.
Assuming you have Python2.7 installed
Goto the Start Menu
Right Click «Computer»
A dialog should pop up with a link on the left called «Advanced system settings». Click it.
In the System Properties dialog, click the button called «Environment Variables».
In the Environment Variables dialog look for «Path» under the System Variables window.
Add «;C:\Python27» to the end of it. The semicolon is the path separator on windows.
Click Ok and close the dialogs.
Now open up a new command prompt and type «python»
It has taken me some effort looking for answers here, on the web, and and in the Python documentation, and testing on my own, to finally get my Python scripts working smoothly on my Windows machines (WinXP and Win7). So, I just blogged about it and am pasting that below in case it’s useful to others. Sorry it’s long, and feel free to improve it; I’m no expert.
[UPDATE: Python 3.3 now includes the Python Launcher for Windows, which allows you to type py (rather than python) to invoke the default interpreter, or py -2, py -3, py -2.7, etc. It also supports shebang lines, allowing the script itself to specify. For versions prior to 3.3, the launcher is available as a separate download. http://docs.python.org/3/whatsnew/3.3.html ]
Running Python scripts conveniently under Windows
Maybe you’re creating your own Python scripts, or maybe someone has given you one for doing something with your data files. Say you’ve acquired a Python script and have saved it to «D:\my scripts\ApplyRE.py». You want to run it conveniently by either double-clicking it or typing it into the command line from any location, with the option of passing parameters to it like this (-o means «overwrite the output file if it already exists»):
Say you also have a data file, «C:\some files\some lexicon.txt». The simplest option is to move the file or the script so they’re in the same location, but that can get messy, so let’s assume that they’ll stay separate.
Making sure Windows can find the Python interpreter
After installing Python, verify that typing python into a command prompt works (and then type exit() to get back out of the Python interpreter).
If this doesn’t work, you’ll need to append something like «;C:\Python32» (without quotes) to the PATH environment variable. See PATHEXT below for instructions.
Associating Python with .py and .pyc
Verify that double-clicking on ApplyRE.py runs it. (It should also have a Python logo as its icon and be labeled «Python File», by the way.) If this isn’t already done, right-click on a .py file, choose Open With, Choose Program, and check «Always use. » This association improves convenience but isn’t strictly necessary—you can specify «python» every time you want to run a script, like this:
Here’s a very specific variation, which is optional unless you need to specify a different version of the interpreter.
But that’s a pain. Fortunately, once Python is installed, in the PATH, and associated with .py, then double-clicking a .py file or directly typing it as a command should work fine. Here, we seem to be running the script directly—it’s nice and simple to run it on a sample file that’s located in the «my scripts» folder along with the script.
Omitting the .py extension (editing PATHEXT)
To further reduce typing, you can tell Windows that .py (and perhaps .pyc files) are executable. To do this, right-click Computer and choose Properties, Advanced, Environment Variables, System Variables. Append «;.PY;.PYC» (without quotes) to the existing PATHEXT variable, or else create it if you’re certan it doesn’t exist yet. Close and reopen the command prompt. You should now be able to omit the .py (FYI, doing so would cause ApplyRE.exe or ApplyRE.bat to run instead, if one existed).
Adding scripts to the system PATH
If you’re going to use your scripts often from the command prompt (it’s less important if doing so via using BAT files), then you’ll want to add your scripts’ folder to the system PATH. (Next to PATHEXT you should see a PATH variable; append «;D:\my scripts» to it, without quotes.) This way you can run a script from some other location against the files in current location, like this:
Success! That’s pretty much all you need to do to streamline the command-line.
Running directly without tweaking the PATH
If you’re a fast typist or don’t mind creating a batch file for each situation, you can specify full paths (for the script, or for the parameters) instead of tweaking PATH.
Creating shortcuts or batch files
If .py is associated with an installed Python, you can just double-click ApplyRE.py to run it, but the console may appear and disappear too quickly to read its output (or failure!). And to pass parameters, you’d need to first do one of the following. (a) Right-click and create a shortcut. Right-click the shortcut to edit properties and append parameters to Target. (b) Create a batch file—a plain text file with a distinct name such as ApplyRErun.bat. This option is probably better because you can ask it to pause so you can see the output. Here is a sample BAT file’s contents, written to be located and run from c:\some files .
Advanced: appending to PYTHONPATH
This usually isn’t necessary, but one other environment variable that may be relevant is PYTHONPATH. If we were to append d:\my scripts to that variable, then other Python scripts in other locations could make use of those via import statements.
Python comes with a script that takes care of setting up the windows path file for you.
After installation, open command prompt
Go to the directory you installed Python in
Run python and the win_add2path.py script in Tools\Scripts
Now you can use python as a command anywhere.
You have to put the python path in the PATH variable.
In the System Variables section, you should have User Variables and System Variables. Search for the PATH variable and edit its value, adding at the end ;C:\python27 .
The ; is to tell the variable to add a new path to this value, and the rest, is just to tell which path that is.
On the other hand, you can use ;%python% to add the variable you created.
You don’t add any variables to the System Variables. You take the existing ‘Path’ system variable, and modify it by adding a semi-colon after, then c:\Python27
So after 30 min of R&D i realized that after setup the PATH at environment variable
C:> cd Python27 C:\ Python27> python.exe
USE python.exe with extension
alternative option is :
if the software is installed properly directly run Python program, your command line screen will automatically appear without cmd.
Go to the Start Menu
Right Click «Computer»
A dialog should pop up with a link on the left called «Advanced system settings». Click it.
In the System Properties dialog, click the button called «Environment Variables».
In the Environment Variables dialog look for «Path» under the System Variables window.
Add «;C:\Python27» to the end of it. The semicolon is the path separator on windows.
Click Ok and close the dialogs.
Now open up a new command prompt and type «python» or if it says error type «py» instead of «python»
Even after going through many posts, it took several hours to figure out the problem. Here is the detailed approach written in simple language to run python via command line in windows.
1. Download executable file from python.org
Choose the latest version and download Windows-executable installer. Execute the downloaded file and let installation complete.
2. Ensure the file is downloaded in some administrator folder
- Search file location of Python application.
- Right click on the .exe file and navigate to its properties. Check if it is of the form, «C:\Users. «. If NO, you are good to go and jump to step 3. Otherwise, clone the Python37 or whatever version you downloaded to one of these locations, «C:\», «C:\Program Files», «C:\Program Files (x86)».
3. Update the system PATH variable This is the most crucial step and there are two ways to do this:- (Follow the second one preferably)
1. MANUALLY
— Search for ‘Edit the system Environment Variables’ in the search bar.(WINDOWS 10)
— In the System Properties dialog, navigate to «Environment Variables».
— In the Environment Variables dialog look for «Path» under the System Variables window. (# Ensure to click on Path under bottom window named System Variables and not under user variables)
— Edit the Path Variable by adding location of Python37/ PythonXX folder. I added following line:-
» ;C:\Program Files (x86)\Python37;C:\Program Files (x86)\Python37\Scripts »
— Click Ok and close the dialogs.