0

我需要使用不同的设置和不同的文件名一遍又一遍地运行一些 python 文件。

这是我需要执行的任务的示例。这适用于 Linux,但我需要在 Windows 中做同样的事情。有没有办法使用 python 作为调用者并运行已经设置为在 STD I/O 上工作的其他 python 脚本?python有这样的shell吗?我宁愿这样做,也不愿切换到在 Linux 和 Windows 上维护批处理代码。

#!/bin/bash
#run scripts to generate and manipulate data

for ((i=1; i<=3 ; i++))
do
    randfuncgen.py -k 12 > randomvalues_$i.fitdata
    probe.py -k 12 < randomvalues_$i.fitdata > randomvalues_$i.walshdata
    std.py -m s < randomvalue_$i.walshdata > randomvalues_separate_std_$i.walshdata
    std.py -m a < randomvalue_$i.walshdata > randomvalues_all_std_$i.walshdata
done
4

2 回答 2

0

Yes, you can use the python subprocess module to do exactly what you are trying to achieve.

Your code could look like

import subprocess
for i in range(3):
    subprocess.Popen(['-k', 12],                                  # args
                     -1,                                          # buffer_sie
                     'python randfuncgen.py',                     # executable
                     stdout=open("randomvalues_%i.fitdata"%i,'w') # output
                     )
    # Other such processes/executions
于 2013-11-05T18:29:08.593 回答
0

您的每个程序(randfuncgen.py、probe.py、std.py)都需要支持通过 sys.stdout.write('your output') 输出和通过 sys.stdin 输入。

您可以在此处查看有关子进程模块的文档和有关“替换 shell 管道”的相关部分http://docs.python.org/2/library/subprocess.html#replacing-shell-pipeline

例如:

import subprocess as sp
for counter in range(1,4):
    p1 = sp.Popen(['randfuncgen.py','-k','12',], stout=sp.PIPE)
    p2 = sp.Popen(['probe.py', '-k', '12'], stdin=p1.stdout, stdout=PIPE)
    p3 = sp.Popen(['std.py', '-m', 's'], stdin=p2.stdout, stdout='randomvalues_separate_std_%d.walshdata'%counter)
    p4 = sp.Popen(['std.py', '-m', 'a'], stdin=p2.stdout, stdout='randomvalues_all_std_%d.walshdata'%counter)

您可能必须将 p2 的输出作为文件进行,因为我不确定在 p4 运行之前管道是否已耗尽

于 2013-11-05T19:08:44.170 回答