我有一个从控制台/ bash接收sys.argv
的文件(test.py):
import sys
def main():
ans = int(sys.argv[1])**int(sys.argv[1])
with open('test.out', 'w') as fout:
fout.write(str(ans))
if __name__ == '__main__':
main()
通常,我可以$ python test.py 2
生成test.out
文件。但我需要从另一个脚本调用test.py中的main()
函数。
我可以在(call.py
)中执行以下操作,但是否有任何其他方法可以在`test.py?中将参数传递给sys.argv
到main()
强>
import os
number = 2
os.system('python test.py '+str(number))
请注意,我不能修改test.py
我还在call.py
中有一个main(),可以执行其他操作。
答案 0 :(得分:2)
如果不修改test.py
,您仍然可以像拥有它一样运行它,只需执行call.py:
import test
test.main()
然后$ python call.py ARG
仍然可以使用。由于您已经在测试中导入sys
,因此除非您想在sys
中使用call.py
,否则无需重新导入。请注意,如果通过电话使用测试,则sys.argv[0]=='call.py'
不会test.py
。
答案 1 :(得分:2)
写得像:
import sys
def main(num):
ans = int(num)**int(num)
with open('test.out', 'w') as fout:
fout.write(str(ans))
if __name__ == '__main__':
main(sys.argv[1])
这样你的main()
函数就不必了解sys.argv - 它只是处理传入它的参数。
答案 2 :(得分:1)
您可以按原样使用您的程序。因为,无论python调用的文件如何,所有python文件都将获得传递的命令行参数。
但您可以将main
函数接受sys.argv
作为默认参数。因此,main
默认情况下始终采用sys.argv
。当您传递不同的列表时,它将采用第一个元素并对其进行处理。
import sys
def main(args = sys.argv):
ans = int(args[1])**int(args[1])
with open('test.out', 'w') as fout:
fout.write(str(ans))
import sys, test
test.main()
答案 3 :(得分:0)
创建一个函数来进行计算和文件编写,可以从任何其他模块调用:
power.py:
import sys
def power(arg):
ans = arg ** arg
with open('test.out', 'w') as fout:
fout.write(str(ans))
if __name__ == '__main__':
power(int(sys.argv[1]))
other.py:
import power
power.power(2)