2013-09-05 109 views
1

我目前正在创建一个脚本,它将循环运行一组子进程,然后等待所有子进程完成。我必须在运行它们之前在子进程中添加变量,所以我想将它写成字符串,然后将字符串转换为命令?会有这样的事情存在吗?Python - 将字符串转换为命令

例如,我有这些stringss:

"p1 = subprocess.Popen('python','hello.py')" 
"p2 = subprocess.Popen('python','hello2.py')" 

我将如何执行它能够在脚本中稍后致电P1或P2? (延续p1.wait())

+0

既然你正在运行的Python的文件,你可以考虑使用'multiprocessing'模块,而不是它是否适合你。 –

回答

6

使用字符串是一个坏主意,我会使用一个列表:

options = [('python','hello.py'), ('python','hello2.py')] 
for option in options: 
    process = subprocess.Popen(option) 
    #do something here 
+2

您可能想要保存'subprocess.Popen'的结果:'processes = [subprocess.Popen(option)for options in options]' –

+0

如果总是使用'​​python',则不需要一直重复列表。 – jcfollower

0
exec("p1 = subprocess.Popen('python','hello.py')") 

注意exec执行报表,而evalevaulates表达式。

但我同意其他答案,如果可以,最好以不同的方式做到这一点。你绝对不应该做的一件事是执行任意的字符串,你不知道它的来源,例如它们是否可以来自用户。

+2

...还要注意'exec'随机字符串是一个非常糟糕的做法。 – l4mpi