如何在python子进程中传递参数?

How to pass arguments in python subprocess?

提问人:AaqilSh 提问时间:5/16/2023 最后编辑:Hai VuAaqilSh 更新时间:5/20/2023 访问量:574

问:

我想创建一个方法,该方法在 python 中使用以下命令执行subprocess.run()

python3 detect_wrong.py --source overpass.mp4 --weights ./my_coco.pt --data ./data/my_coco.yaml

subprocess.run(["python","detect_wrong.py"])

我被困在这一步。我想知道如何传递这些参数。

python-3.x 子流程 命令 参数传递

评论

1赞 B Remmelzwaal 5/16/2023
detect_wrong.py是 的参数,所以你已经在这样做了。python

答:

0赞 The Coding Penguin 5/16/2023 #1

如下所述:https://docs.python.org/3/library/subprocess.html,您可以在数组中添加通常在命令行中传递的每个参数。

例如,如果你想运行,你可以这样写:ls -l --color=auto

subprocess.run(["ls", "-l", "--color=auto"])

在这里,这将是:

subprocess.run(["python3", "detect_wrong.py", "--source", "overpass.mp4", "--weights", "./my_coco.pt", "--data", "./data/my_coco.yaml"])

但是,由于您想从 Python 运行 Python 脚本,因此我建议您看一下这里: 如何让一个 python 文件运行另一个? 并且,如上所述,如果可能的话,将其视为一个模块。 否则,你可以用 or 运行它,如果绝望的话,用 ordetect_wrong.pyexec()os.system()subprocess.run()

0赞 Matmozaur 5/16/2023 #2

您可以简单地将参数作为列表中的实体传递,如下所示:

subprocess.run(["python", "--argument=value", "detect_wrong.py"]
0赞 Prayas Jain 5/16/2023 #3

要使用 Python 中的模块执行命令,您可以修改前面的示例代码,如下所示:python3 detect_wrong.py --source overpass.mp4 --weights ./my_coco.pt --data ./data/my_coco.yamlsubprocess

import subprocess

command = ['python3', 'detect_wrong.py', '--source', 'overpass.mp4', '--weights', './my_coco.pt', '--data', './data/my_coco.yaml']
subprocess.run(command)

在此代码中,命令被指定为一个列表,其中每个元素表示命令及其参数的一部分。第一个元素是指定 Python 解释器,然后是指示脚本名称,然后是命令行参数 、 、 、 和 。'python3''detect_wrong.py'--sourceoverpass.mp4--weights./my_coco.pt--data./data/my_coco.yaml

确保根据您的特定用例调整命令和参数,包括所用文件的正确路径。

评论

0赞 tchrist 7/11/2023
这个答案看起来像是由人工智能(如 ChatGPT)生成的,而不是由真人生成的。您应该知道,在 Stack Overflow 上发布 AI 生成的输出是正式禁止。如果这个答案确实是由人工智能生成的,那么我强烈建议你在给自己带来更大的麻烦之前删除它:我们在这里认真对待抄袭。请阅读:为什么目前不允许发布 GPT 和 ChatGPT 生成的答案
0赞 dolker 5/16/2023 #4

只需在 subprocess.run 列表中附加参数即可

subprocess.run(["python","detect_wrong.py","--source=overpass.mp4", "--weights=./my_coco.pt", "--data=./data/my_coco.yaml"])