我有一个脚本a.py:
#!/usr/bin/env python
def foo(arg1, arg2):
return int(arg1) + int(arg2)
if __name__ == "__main__":
import sys
print foo(sys.argv[1], sys.argv[2])`
我现在想制作一个可以运行第一个脚本并将a.py的输出写入带有一些参数的文件的脚本。我想让automate_output(src,arglist)生成一些我可以写入outfile的输出:
import sys
def automate_output(src, arglist):
return ""
def print_to_file (src, outfile, arglist):
print "printing to file %s" %(outfile)
out = open(outfile, 'w')
s = open(src, 'r')
for line in s:
out.write(line)
s.close()
out.write(" \"\"\"\n Run time example: \n")
out.write(automate(src, arglist))
out.write(" \"\"\"\n")
out.close()
try:
src = sys.argv[1]
outfile = sys.argv[2]
arglist = sys.argv[3:]
automate(src, arglist)
print_to_file(src,outfile,arglist)
except:
print "error"
#print "usage : python automate_runtime.py scriptname outfile args"
我尝试过搜索,但到目前为止,我不明白如何通过使用带参数的os.system来传递参数。我也尝试过:
import a
a.main()
我得到一个NameError:名称'main'未定义
更新:
我研究了一些,发现了子进程,我现在看起来非常接近破解它。
以下代码确实有效,但我想传递args而不是手动传递'2'和'3'
src ='bar.py'
args =('2','3')
proc = subprocess.Popen(['python',src,'2','3'],stdout = subprocess.PIPE,stderr = subprocess.STDOUT)
print proc.communicate()[0]
答案 0 :(得分:1)
a.main()
与if __name__=="__main__"
阻止无关。前者从main()
模块调用名为a
的函数,后者在当前模块名称为__main__
时执行其块,即,当模块作为脚本调用时。
#!/usr/bin/env python
# a.py
def func():
print repr(__name__)
if __name__=="__main__":
print "as a script",
func()
比较作为脚本执行的模块和从导入的模块调用的函数:
$ python a.py
as a script '__main__'
$ python -c "import a; print 'via import',; a.func()"
via import 'a'
请参阅section Modules in the Python tutorial。
要从子流程获取输出,您可以使用subprocess.check_output()
函数:
import sys
from subprocess import check_output as qx
args = ['2', '3']
output = qx([sys.executable, 'bar.py'] + args)
print output
答案 1 :(得分:1)
这不是一个函数,它是一个if
语句:
if __name__ == "__main__":
...
如果你想要一个主要功能,请定义一个:
import sys
def main():
print foo(sys.argv[1], sys.argv[2])`
如果您需要,请调用它:
if __name__ == "__main__":
main()