我想用参数启动一个python文件(.py),并在完成后接收它的输出。我已经听说过“popen”和“subprocess.call”但我找不到任何教程如何使用它们
有没有人知道一个好的教程?
答案 0 :(得分:5)
你不需要它们;只需将您的文件作为程序启动,例如
./main.py arg1 arg2 arg3 >some_file
(为此你的文件必须以#!/usr/bin/env python
)
使用sys
模块,您可以访问它们:
arg1 = sys.argv[1]
arg2 = sys.argv[2]
arg3 = sys.argv[3]
答案 1 :(得分:5)
我想用参数启动一个python文件(.py),并在完成后接收它的输出。
步骤1.不要使用subprocess
。你做错了。
步骤2.阅读您要运行的Python文件。我们称之为runme.py
。
步骤3.再次阅读。如果它写得很好,那么会有一段代码启动if __name__ == "__main__":
。以下是该文件的“外部接口”。由于您未在问题中提供任何信息,我认为它看起来像这样。
if __name__ == "__main__":
main()
步骤4.读取调用脚本调用的“main”函数。由于您没有提供任何信息,我认为它看起来像这样。
def main():
options, args = parse_options()
for name in args:
process( options, file )
继续阅读以确保了解parse_options
和process
的工作原理。我假设parse_options
使用optparse
。
步骤5.编写“调用”脚本。
import runme
import sys
import optparse
options = options= optparse.Values({'this':'that','option':'arg','flag':True})
with open( "theoutput.out", "w" ) as results:
sys.stdout= results
for name in ('some', 'list', 'of', 'arguments' ):
runme.process( options, name )
这是从Python中运行Python文件的正确方法。
实际上找出你想要运行的东西的界面。然后运行它。
答案 2 :(得分:1)
runme.py
print 'catch me'
<强> main.py 强>
import sys
from StringIO import StringIO
new_out = StringIO()
old_out = sys.stdout
sys.stdout = new_out
import runme
sys.stdout = old_out
new_out.seek(0)
print new_out.read()
和...
$ python main.py
catch me
答案 3 :(得分:0)
除非你想要从Python 中启动Python文件?在这种情况下,它甚至更好:
import nameOfPythonFile