使用子进程运行单独的python程序

使用子进程运行单独的python程序,python,subprocess,Python,Subprocess,我正在尝试创建一个脚本来运行我的其他python程序。我不熟悉子流程模块,所以这让我有点困惑 项目结构 cron_functional.py print(os.getcwd()) # print(subprocess.check_output('ls')) runtag = "daily_run_" + datetime.today().strftime("%m_%d_%y") testrun = "source ../../setup.sh; ./test_web_events.py -n 1

我正在尝试创建一个脚本来运行我的其他python程序。我不熟悉
子流程
模块,所以这让我有点困惑

项目结构

cron_functional.py

print(os.getcwd())
# print(subprocess.check_output('ls'))
runtag = "daily_run_" + datetime.today().strftime("%m_%d_%y")
testrun = "source ../../setup.sh; ./test_web_events.py -n 10 -t prf -E ctg-businessevent -p post {}".format(runtag)
cmd = testrun.split()
print(cmd)
subprocess.check_output(cmd)
输出

$ python cron_functional.py 
/Users/bli1/Development/QE/qe-functional/qe/tests
['source', '../../setup.sh;', './test_web_events.py', '-n', '10', '-t', 'prf', '-E', 'ctg-businessevent', '-p', 'post', 'daily_run_05_26_15']
Traceback (most recent call last):
  File "cron_functional.py", line 11, in <module>
    subprocess.check_output(cmd)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 566, in check_output
    process = Popen(stdout=PIPE, *popenargs, **kwargs)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 709, in __init__
    errread, errwrite)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 1326, in _execute_child
    raise child_exception
OSError: [Errno 2] No such file or directory
$python cron\u functional.py
/用户/bli1/开发/QE/QE功能/QE/测试
['source'、'../../setup.sh;'、'./test_web_events.py'、'-n'、'10'、'-t'、'prf'、'-E'、'ctg businessevent'、'-p'、'post'、'daily_run_05_26_15']
回溯(最近一次呼叫最后一次):
文件“cron_functional.py”,第11行,在
子进程检查输出(cmd)
check_输出中的文件“/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py”,第566行
进程=Popen(stdout=PIPE,*popenargs,**kwargs)
文件“/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py”,第709行,在__
错误读取,错误写入)
文件“/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py”,第1326行,在执行子进程中
引发子对象异常
OSError:[Errno 2]没有这样的文件或目录

源代码
是一个内部shell命令,而不是可执行文件。您需要的不是运行一个带有11个参数的
source
命令,而是一个单行shell脚本。您需要将整个脚本作为一个字符串传递给shell进行解释

subprocess.check_output(testrun, shell=True)
您还没有说
setup.sh
做什么。如果设置环境变量并更改工作目录,请考虑在Python中执行此操作。然后你就可以跑了

subprocess.check_output(['./test_web_events.py', '-n', '10', …, '-p', 'post', runtag])

…不涉及shell。

源代码
是一个bash命令,您可能需要在传递给
子进程的命令的最开始添加
/bin/sh
。检查输出。
。此外,使用相对路径名(
。/../
/
)是一个有待解决的问题。如果您可以使用绝对名称或从环境中获取目录名(如
HOME
),请在调用时指定一个shell:
子进程。检查输出(cmd,shell=True)
注意文档中的安全隐患警告。您是否意识到您正在将参数传递给
setup.sh
subprocess.check_output(testrun, shell=True)