python - 无法使用子进程进行连续调用

标签 python subprocess

我在连续使用多个子进程调用时遇到问题。

这两个工作正常:

subprocess.call(["gmake", "boot-tilera"], cwd="/home/ecorbett/trn_fp")
p = subprocess.Popen(["gmake", "run-tilera"], stdout=subprocess.PIPE, cwd="/home/ecorbett/trn_fp")

但是,当我尝试在以下位置直接运行此调用时出现错误:

time.sleep(10)
subprocess.call(["./go2.sh"], cwd="/home/ecorbett/trn_fp/kem_ut")

我在那里添加了 sleep ,因为在运行“./go2.sh”程序之前我需要几秒钟。不确定这是否是问题所在。

有什么建议吗?

最佳答案

您的 shell 脚本在命令行上运行的一个可能原因是 shebang 行编写不正确(或根本没有编写)。请参阅一个示例,其中脚本可以从命令行运行,但不能作为 Python 子进程运行: Is this the right way to run a shell script inside Python?

如果您的 shell 脚本没有指定 shebang 行,它将在命令行中工作,因为 $SHELL 是在您的环境中设置的,并且脚本将其作为默认值。当从 python 子进程运行时,python 不知道它是什么,并且失败并显示 OSError: [Errno 8] Exec format errorgmakesubprocess.call() 之所以有效,是因为它是一个二进制程序,而不是 shell 脚本。使用参数 shell=True 给出了一条指令来解释该参数,就像在 shell 中一样。

但是,在 subprocess.call() 中使用 shell=True 时要小心,因为在某些情况下它可能不安全:subprocess Python docs .

关于python - 无法使用子进程进行连续调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11677825/

相关文章:

python - FLASK Restful API 无法使用 PUT 添加

python - 使用正则表达式查找多次出现的字符

Python opencv子进程写入返回损坏的管道

Python:在后台运行带重定向的bash命令并获取进程ID

python - 为什么 python 子进程输出与 shell 不同?

python - 如果父进程创建一些子进程,则 subprocess.communicate() 在 Windows 8 上挂起

python - 使用非线性 SVM 时如何解释类​​别权重?

python - 删除和更换打印项目

python - 打开文件进行随机写入而不截断?

python - 查看是否存在以 root 身份运行的进程