【发布时间】:2019-08-06 09:25:40
【问题描述】:
我有一个每天早上运行的例程,我希望在其中运行一系列程序。它看起来像这样。 (programCaller.py的内容)
programs = [
'program 1',
'program 2',
'program 3'
]
for program in programs:
print('Executing: ' + program)
p = subprocess.Popen('/path/to/directory/' + program)
p.communicate()
直到一周左右之前,一切都运行良好。它实时通信(我在 Windows 上努力获得的特权,因为我在 Mac 上运行它),如果一个程序失败,它会转到下一个。
现在它不仅仅从 IDLE 运行。但是,它在终端“./programCaller.py”上工作得很好。
当然,所有程序都有shebang行和权限。我已经尝试了 shell=True、executable、stdout 和其他参数的所有变体,但它不起作用。
它的作用是立即完成执行,给我“>>>”提示,就好像它已经完成一样。而且它在后台不起作用,因为我测试了一个非常简单的程序,它可以向我发送邮件,但它没有这样做。
某些东西肯定发生了变化,也许它使用了另一个可执行文件,但它是无声的崩溃。
【问题讨论】:
-
您可能需要用双引号将程序路径括起来
",因为它可能包含嵌入的空格字符。 -
这有什么不同吗?无论如何,我的标题中从来没有空格
-
但是你的
programs中确实有空格——当传递给Popen的第一个参数是单个字符串时,是的it does matter。
标签: python terminal subprocess popen execution