从python脚本中获取python脚本的输出

时间:2011-05-22 04:29:51

标签: python

printbob.py:

import sys
for arg in sys.argv:
    print arg

getbob.py

import subprocess
#printbob.py will always be in root of getbob.py
#a sample of sending commands to printbob.py is:
#printboby.py arg1 arg2 arg3   (commands are seperated by spaces)

print subprocess.Popen(['printbob.py',  'arg1 arg2 arg3 arg4']).wait()

x = raw_input('done')

我明白了:

  File "C:\Python27\lib\subprocess.py", line 672, in __init__
    errread, errwrite)
  File "C:\Python27\lib\subprocess.py", line 882, in _execute_child
    startupinfo)
WindowsError: [Error 193] %1 is not a valid Win32 application

我在这里做错了什么? 我只想在另一个python脚本中获取另一个python脚本的输出。 我是否需要调用cmd.exe或者我可以运行printbob.py并向其发送命令吗?

4 个答案:

答案 0 :(得分:10)

proc = subprocess.Popen(['python', 'printbob.py',  'arg1 arg2 arg3 arg4'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
print proc.communicate()[0]

虽然脚本也是Python,但必须有更好的方法。最好找到一些方法来利用它而不是你正在做的事情。

答案 1 :(得分:2)

这是错误的方法。

你应该重构printbob.py,以便它可以被其他python模块导入。可以从命令行导入和调用此版本:

#!/usr/bin/env python

import sys

def main(args):
    for arg in args:
        print(arg)

if __name__ == '__main__':
    main(sys.argv)

这里是从命令行调用的:

python printbob.py one two three four five
printbob.py
one
two
three
four
five

现在我们可以在getbob.py中导入它:

#!/usr/bin/env python

import printbob

printbob.main('arg1 arg2 arg3 arg4'.split(' '))

这里正在运行:

python getbob.py 
arg1
arg2
arg3
arg4

答案 2 :(得分:1)

  

shell参数(默认为False)指定是否使用   shell作为要执行的程序。如果shell为True,则为   建议将args作为字符串而不是序列

传递

只需将所有参数包装在一个字符串中,然后给出shell=True

proc = subprocess.Popen("python myScript.py --alpha=arg1 -b arg2 arg3" ,stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=True)
print proc.communicate()[0]

答案 3 :(得分:0)

buttonUrlNew函数是在Python 3.5中添加的。

subprocess.run()

引用:PEP 324 – PEP proposing the subprocess module