我正在创建一个脚本,它将循环运行一组Subprocess,然后等待所有子进程完成。我必须在运行它们之前将变量添加到子进程中,所以我想把它写成一个字符串,然后将字符串转换为命令?这样的事情会存在吗?
例如,我有这些stringss:
"p1 = subprocess.Popen('python','hello.py')"
"p2 = subprocess.Popen('python','hello2.py')"
如何执行它以便稍后在脚本中调用p1或p2? (例如,p1.wait())
答案 0 :(得分:6)
使用字符串是一个坏主意,我使用列表:
options = [('python','hello.py'), ('python','hello2.py')]
for option in options:
process = subprocess.Popen(option)
#do something here
答案 1 :(得分:0)
exec("p1 = subprocess.Popen('python','hello.py')")
请注意,exec
执行语句,而eval
则表示表达式。
但我同意另一个答案,如果可以,最好以不同的方式做到这一点。你绝对不应该做的一件事是执行你不知道的源的任意字符串,例如,如果它们可能来自用户。