2016-12-15 104 views
0

我想从批处理文件传递参数到我的python文件。
我跟着在这两个环节上的步骤:无法从批处理文件传递参数到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' 

我跟很多关于这个问题的计算器的问题,但我仍然是无法运行。不知道错误在哪里。

回答

4

该问题与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') 
+1

非常感谢。有效。 – user7096987

相关问题