【发布时间】:2010-07-23 09:33:01
【问题描述】:
我想用参数启动一个 python 文件 (.py) 并在完成后接收它的输出。我已经听说过“popen”和“subprocess.call”,但我找不到任何教程如何使用它们
有人知道好的教程吗?
【问题讨论】:
-
subprocess和popen用于从python调用外部程序,如果你想从python调用python有更简单的方法。
标签: python python-3.x
我想用参数启动一个 python 文件 (.py) 并在完成后接收它的输出。我已经听说过“popen”和“subprocess.call”,但我找不到任何教程如何使用它们
有人知道好的教程吗?
【问题讨论】:
标签: python python-3.x
你不需要它们;只需将您的文件作为提供参数的程序启动,例如
./main.py arg1 arg2 arg3 >some_file
(因为您的文件必须以 #!/usr/bin/env python 之类的开头)
使用sys 模块您可以访问它们:
arg1 = sys.argv[1]
arg2 = sys.argv[2]
arg3 = sys.argv[3]
【讨论】:
> some_file 将输出通过管道传输到文件中,该文件肯定会接收输出。如果 OP 也希望在 stdout 上输出,只需将 > 替换为 tee
我想用参数启动一个 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 文件的正确方法。
实际上找出你要运行的东西的接口。并运行它。
【讨论】:
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
【讨论】:
除非您的意思是要从 Python 中启动 Python 文件?在这种情况下,它会更好:
import nameOfPythonFile
【讨论】: