【问题标题】:Unable to pass argument from batch file to python file无法将参数从批处理文件传递到 python 文件
【发布时间】:2017-05-01 09:04:09
【问题描述】:

我正在尝试将一个参数从批处理文件传递到我的 python 文件。
我按照这两个链接中给出的步骤进行操作:

这是我尝试传递参数的python文件的一部分:

def main(argv):
imapServ = 'imap.gmail.com'
filename = 'TestRunLog.log'
attachment = open("{} {}".format(argv[0], filename), 'rb')
....##rest of the code

import sys
try:
if __name__ == '__main__':
   print 'go ahead'
   main(sys.argv[:1])
except ImportError:
   print 'hi'

另外,这是我用来向 Python 文件发送参数的批处理文件的一部分:

c:\python27\python.exe C:\Users\abcd\Documents\automation\testsendemail.py %%myhome%\Documents\automation\Testresults\%resultDir%
pause

以上,%resultDir% 是根据时间戳生成的变量。

这是输出:

go ahead
Traceback (most recent call last):
C:/Users/abcd/Documents/automation/testsendemail.py\TestRunLog.log
  File "C:/Users/abcd/Documents/automation/testsendemail.py", line 44, in <module>
    main(sys.argv[:1])
  File "C:/Users/abcd/Documents/automation/testsendemail.py", line 25, in main
    attachment = open("{} {}".format(argv[0], filename), 'rb')
IOError: [Errno 2] No such file or directory: 'C:/Users/abcd/Documents/automation/testsendemail.py TestRunLog.log'

我关注了很多关于这个问题的 stackoverflow 问题,但我仍然无法运行。不知道错误在哪里。

【问题讨论】:

    标签: python windows batch-file python-2.x


    【解决方案1】:

    这个问题与 python 如何与 argv 一起工作有关。 在这种情况下,当您运行时:

    main(sys.argv[:1]) # (["C:\Users\abcd\Documents\automation\testsendemail.py"])
    

    您实际上获得传递给 python 脚本的第一个参数,即当前脚本位置。

    要获取除第一个以外的所有参数,您必须修复该数组过滤器:

    main(sys.argv[1:]) # ["%%myhome%\Documents\automation\Testresults\%resultDir%"])
    

    请注意,第二个过滤器还将包含您可能添加到命令行的任何其他参数。


    另外,作为旁注。您应该考虑使用 STD 库来加入路径。 应该是这样的:

    from os.path import join
    (...)
    filename = 'TestRunLog.log'
    attachment = open(join(argv[0], filename), 'rb')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-30
      • 2015-08-18
      • 2011-09-15
      • 2017-02-11
      相关资源
      最近更新 更多