繁体   English   中英

从另一个.py文件使用sys.argv-python

[英]Using sys.argv from another .py file - 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 )中执行以下操作,但是还有其他方法可以运行将test.py中的sys.argv参数传递给main()吗?

import os

number = 2
os.system('python test.py '+str(number))

请注意,我不能修改test.pycall.py也有main()可以做其他事情。

无需修改test.py您仍然可以call.py:运行它,只需执行call.py:

import test

test.main()

那么$ python call.py ARG仍然可以使用。 由于您已经在测试中导入了sys ,因此除非您想在call.py使用sys ,否则无需重新导入它。 需要注意的是sys.argv[0]=='call.py'test.py ,如果通过电话使用的测试。

像这样写:

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了-它只处理传递给它的参数。

您可以按原样使用程序。 因为,无论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()

创建一个函数来进行计算和文件编写,可以从任何其他模块调用该函数:

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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM