【问题标题】:Using sys.argv from another .py file - python使用另一个 .py 文件中的 sys.argv - python
【发布时间】:2014-05-02 14:42:11
【问题描述】:

我有一个从控制台/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.argvmain() 吗?

import os

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

请注意,我不能修改 test.py,并且我在 call.py 中还有一个 main(),它可以做其他事情。

【问题讨论】:

    标签: python bash argv sys


    【解决方案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()
    

    【讨论】:

      【解决方案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 - 它只处理传递给它的参数。

      【讨论】:

        【解决方案3】:

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

        import test
        
        test.main()
        

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

        【讨论】:

          【解决方案4】:

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

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

          其他.py:

          import power
          
          power.power(2)
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-12-21
            • 2021-06-25
            • 1970-01-01
            • 1970-01-01
            • 2018-08-31
            相关资源
            最近更新 更多