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并向其发送命令吗?
答案 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)