2016-12-15 12 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%は、タイムスタンプに基づいて生成される変数です。ここで

が出力されます。私はこの問題についてstackoverflowの質問の多くを踏襲

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 libを使用することを検討する必要があります。 これは次のようなものです:

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

ありがとうございます。出来た。 – user7096987

関連する問題