带参数调用程序
我想要启动一个Python文件(.py),并传入一些参数,然后在它完成后获取输出。我听说过“popen”和“subprocess.call”,但我找不到关于如何使用它们的教程。
有没有人知道好的教程推荐?
4 个回答
1
runme.py 是一个 Python 文件,通常用来执行一些代码。
print 'catch me'
main.py 是另一个 Python 文件,里面可能包含了程序的主要逻辑或功能。
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
5
我想要用参数启动一个Python文件(.py),并在它完成后获取输出。
步骤1. 不要使用 subprocess
。这样做是不对的。
步骤2. 找到你想运行的Python文件,假设它叫 runme.py
。
步骤3. 再看一遍这个文件。如果写得不错,里面会有一段代码是 if __name__ == "__main__":
开头的。接下来就是这个文件的“外部接口”。因为你没有提供具体信息,我假设它看起来像这样。
if __name__ == "__main__":
main()
步骤4. 查看被调用脚本中调用的“主”函数。由于你没有提供信息,我假设它看起来像这样。
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文件的正确方法。
真正搞清楚你想运行的东西的接口,然后去运行它。
6
你不需要那些东西;只需像下面这样运行你的文件,给它传递参数:
./main.py arg1 arg2 arg3 >some_file
(为了这样做,你的文件开头必须有类似 #!/usr/bin/env python
的内容)
使用 sys
模块,你可以访问这些参数:
arg1 = sys.argv[1]
arg2 = sys.argv[2]
arg3 = sys.argv[3]