从另一个.py文件中使用sys.argv - python
我有一个文件(test.py),它会从控制台或bash接收一些参数,叫做 sys.argv
:
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
) 里这样做,但 有没有其他方法可以把参数传给 sys.argv
,然后再调用 test.py 里的 main()
呢?
import os
number = 2
os.system('python test.py '+str(number))
请注意,我 不能 修改 test.py
,而且在 call.py
里我也有一个 main()
函数,它做其他事情。
4 个回答
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)
2
你可以在不修改 test.py
的情况下,照样运行它,只需要在 call.py
中这样做:
import test
test.main()
然后输入 $ python call.py ARG
依然可以正常工作。因为你已经在 test.py
中引入了 sys
,所以在 call.py
中不需要再次引入,除非你想在 call.py
中使用 sys
。需要注意的是,如果通过 call.py
来使用 test.py
,那么 sys.argv[0]
的值会是 'call.py'
而不是 'test.py'
。
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
你可以直接使用你的程序。因为无论你用Python调用哪个文件,所有的Python文件都会接收到命令行传递的参数。
不过,你可以让main
函数默认接受sys.argv
作为参数。这样一来,main
函数就会默认使用sys.argv
。如果你传入一个不同的列表,它会取第一个元素来处理。
test.py
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))
call.py
import sys, test
test.main()