使用来自另一个.py文件的sys.argv - python

时间:2014-05-02 04:56:23

标签: python bash argv sys

我有一个从控制台/ 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(),可以执行其他操作。

4 个答案:

答案 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。当您传递不同的列表时,它将采用第一个元素并对其进行处理。

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()

答案 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)