当前位置: 首页 > 面试题库 >

使用参数运行python脚本

齐学文
2023-03-14
问题内容

我想从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(..)方法的方法。


问题答案:

似乎您正在使用Python.h中的python开发API寻找答案。这是一个适合您的示例:

#My python script called mypy.py
import sys

if 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脚本。一切正常。我遇到的问题是,每当我将参数传递到python脚本时,python脚本都会以响应。但是,如果我采用确切的命令并将其复制并粘贴到命令提示符下,则它运行得很好。有什么帮助吗?这是我现在所拥有的一般想法: 问题答案: 将两个单独的参数传递给,而不是串联和: 否则,要执行的程序将看到无法识别的单个参数。

  • 问题内容: 我有一个想要添加到cron的python脚本。 脚本具有+ x权限。 如何将其添加到crontab?(例如,我希望它每分钟运行一次)。 重要提示:当我(使用外壳)导航到脚本的文件夹时,无法使用“ ./script_name.py”运行它;它不起作用。但是,当我使用“ Python script_name.py”运行它时,一切正常。 问题答案: 从您应该运行该脚本和脚本符合下列条件: 可

  • 问题内容: 我想从另一个Python脚本运行一个Python脚本。我想像使用命令行一样传递变量。 例如,我会跑我的,将通过值(0,1,2,3)的列表迭代第一个脚本,并通过那些到第二脚本,然后,等 我发现了Stack Overflow问题1186789,这是一个类似的问题,但是ars的答案调用了一个函数,在这里我想运行整个脚本,而不仅仅是函数,而balpha的答案则调用了脚本,但没有参数。我将其更改

  • 问题内容: 这可能是一个非常简单的问题,但是如何每两天在我的fedora dist上运行一个python脚本? 谢谢 安东尼斯 问题答案: 这是关于cron的问题。首先是在python脚本顶部添加SHEBANG行。 使您的脚本可执行 然后执行crontab -e并添加

  • 问题内容: 我知道我可以使用以下命令从bash脚本运行python脚本: 但是,如果我想将变量/自变量从bash脚本传递到python脚本,该怎么办?我怎样才能做到这一点? 基本上,bash会计算出文件名,然后python将其上传,但是当我调用它时,我需要将文件名从bash发送到python。 问题答案: 要在bash脚本中执行python脚本,您需要调用与终端相同的命令。例如 要在python中

  • 问题内容: 我正在尝试运行Python工作。我创建了以下文件夹: C:\ Users \ herod \ jenkins_ws \ workspace \ window_testing 并添加了脚本“ testing.py”。 该脚本非常简单: 但是从Jenkins运行它时出现以下错误(如果我从命令行运行它会起作用): 我究竟做错了什么 ? 这是我尝试过的: 在构建部分的作业配置中,我选择“执行p