关于使用参数运行python脚本和python带参数运行的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于ProcessBuilder无法使用参数运行python脚本、python:我可以在
关于使用参数运行python脚本和python 带参数运行的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于ProcessBuilder无法使用参数运行python脚本、python:我可以在不实际安装python的情况下运行python脚本吗?、从C ++代码运行python脚本并在c ++中使用pythons输出、从PHP运行Python脚本等相关知识的信息别忘了在本站进行查找喔。
本文目录一览:- 使用参数运行python脚本(python 带参数运行)
- ProcessBuilder无法使用参数运行python脚本
- python:我可以在不实际安装python的情况下运行python脚本吗?
- 从C ++代码运行python脚本并在c ++中使用pythons输出
- 从PHP运行Python脚本
使用参数运行python脚本(python 带参数运行)
我想从C调用Python脚本,并传递脚本中所需的一些参数。
我要使用的脚本是mrsync或多播远程同步。我通过调用以下命令从命令行进行了工作:
python mrsync.py -m /tmp/targets.list -s /tmp/sourcedata -t /tmp/targetdata
-m是包含目标ip地址的列表。-s是包含要同步的文件的目录。-t是目标计算机上将放置文件的目录。
到目前为止,通过使用以下C程序,我设法运行了没有参数的Python脚本:
Py_Initialize();FILE* file = fopen("/tmp/myfile.py", "r");PyRun_SimpleFile(file, "/tmp/myfile.py");Py_Finalize();
这很好。但是,我找不到如何将这些参数传递给PyRun_SimpleFile(..)
方法的方法。
答案1
小编典典似乎您正在使用Python.h中的python开发API寻找答案。这是一个适合您的示例:
#My python script called mypy.pyimport sysif len(sys.argv) != 2: sys.exit("Not enough args")ca_one = str(sys.argv[1])ca_two = str(sys.argv[2])print "My command line args are " + ca_one + " and " + ca_two
然后通过C代码传递这些args:
//My code file#include <stdio.h>#include <python2.7/Python.h>void main(){ FILE* file; int argc; char * argv[3]; argc = 3; argv[0] = "mypy.py"; argv[1] = "-m"; argv[2] = "/tmp/targets.list"; Py_SetProgramName(argv[0]); Py_Initialize(); PySys_SetArgv(argc, argv); file = fopen("mypy.py","r"); PyRun_SimpleFile(file, "mypy.py"); Py_Finalize(); return;}
如果可以将参数传递给C函数,则此任务将变得更加容易:
void main(int argc, char *argv[]){ FILE* file; Py_SetProgramName(argv[0]); Py_Initialize(); PySys_SetArgv(argc, argv); file = fopen("mypy.py","r"); PyRun_SimpleFile(file, "mypy.py"); Py_Finalize(); return;}
您可以直截了当。现在,为了节省时间,我的解决方案只使用了2个命令行参数,但是您可以对所有6个参数使用相同的概念…当然,还有更简洁的方法可以在python端捕获args,但是那只是基本的想法。
希望能帮助到你!
ProcessBuilder无法使用参数运行python脚本
好的,所以我有一个通过ProcessBuilder运行的python脚本。一切正常。我遇到的问题是,每当我将参数传递到python脚本时,python脚本都会以响应unrecognizedargumets
。但是,如果我采用确切的命令并将其复制并粘贴到命令提示符下,则它运行得很好。有什么帮助吗?这是我现在所拥有的一般想法:
ProcessBuilder builder = new ProcessBuilder("C:\Python33\" + "python.exe","-u", "C:\...\script.py", "--arg1 " + "argumentValue");p = builder.start();
答案1
小编典典将两个单独的参数传递给,ProcessBuilder
而不是串联--arg1
和argumentValue
:
ProcessBuilder builder = new ProcessBuilder("C:\\Python33\\python.exe", "-u", "C:\\...\\script.py, "--arg1", "argumentValue");
否则,要执行的程序将看到--arg1 argumentValue
无法识别的单个参数。
python:我可以在不实际安装python的情况下运行python脚本吗?
我写了一些要在其他计算机上运行的.py文件。目标机器未安装python,因此我无法通过策略“安装”它。我所能做的就是复制文件,运行我的东西,然后将其删除。
我试图将开发python文件夹移至目标计算机,将cd移至python文件夹并运行python.exe
/path/to/.py/file
。它给我一个错误,指出未注册python.dll。如果我注册了DLL,这可能会使我跨过“违反政策”行。
无论如何,我是否可以在没有实际安装python的机器上完成运行python文件的操作(试图让py2exe现在工作,但这很痛苦)?
从C ++代码运行python脚本并在c ++中使用pythons输出
您必须将代码链接到libpython3.x.a / python3.x.lib(x-您使用的python版本)。链接哪个文件:*。a或* .lib取决于您的操作系统。这些文件可通过python发行版获得。
这是带有cmake的代码,对我有用:
cmake_minimum_required(VERSION 2.8.9)
project (embpy)
add_executable(embpy embpy.cpp)
target_include_directories(embpy PRIVATE /path-to-python/Python38/include/python3.8)
target_link_libraries(embpy /path-to-python/Python38/lib/libpython3.8.a)
embpy.cpp与您的相同
,然后我自己弄清楚了,问题出在编译器参数不完整。
这就是我可以使用的:
g++ -fPIC $(python3.6-config --cflags) cpp.cpp $(python3.6-config --ldflags)
缺少的关键部分是要编译的文件之前的$(python3.6-config --cflags)
和之后的$(python3.6-config --ldflags)
。第一个为g ++提供编译选项,第二个为链接提供标志。
从python docs(第1.6部分)中找到了解决方案。
从PHP运行Python脚本
我正在尝试使用以下命令从PHP运行Python脚本:
exec('/usr/bin/python2.7 /srv/http/assets/py/switch.py arg1 arg2');
但是,PHP根本不会产生任何输出。错误报告设置为E_ALL
,并且display_errors
打开。
这是我尝试过的:
- 我使用
python2,/usr/bin/python2
而python2.7
不是/usr/bin/python2.7
- 我还使用了相对路径而不是绝对路径,该绝对路径也没有任何改变。
- 我试着使用的命令
exec,shell_exec,system
。
但是,如果我跑步
if (exec('echo TEST') == 'TEST')
{
echo 'exec works!';
}
它shutdown now什么都没做,但工作得很好。
PHP有权访问和执行文件。
编辑:感谢亚历杭德罗,我能够解决此问题。如果你遇到相同的问题,请不要忘记你的网络服务器可能/希望不是以root用户身份运行。尝试以你的Web服务器用户或具有类似权限的用户身份登录,然后尝试自己运行命令。
今天的关于使用参数运行python脚本和python 带参数运行的分享已经结束,谢谢您的关注,如果想了解更多关于ProcessBuilder无法使用参数运行python脚本、python:我可以在不实际安装python的情况下运行python脚本吗?、从C ++代码运行python脚本并在c ++中使用pythons输出、从PHP运行Python脚本的相关知识,请在本站进行查询。
本文标签: