2017-10-16 6 views
1

私はWindows Pythonを初めて使用しています。私はPythonを使用してコマンドラインツールを実行しようとしています。このツールは、マシンのIPアドレスに接続しているファームウェアをフラッシュします。私は、CMDプロンプトを開き、コマンドを使用することができますWindows上でPythonを使用してプログラムを実行

C:\ ToolsSuite> SDI --ip 172.23.240.41 --fwdl「C:firmware_image.zip .Thisは非常によく私の作品\ \ビルド

しかし、私はWindows上でPythonスクリプトを使用して実行しようとしたとき、私はそれを行うことができないのです。Pythonスクリプトは次のようになります。

import subprocess 
import os 

os.chdir(r"C:\ToolsSuite") 
#os.system('cd c:\mydir') 
os.system("sdi --ip 192.92.48.32 --fwdl C:\firmware_image.zip") 

#subprocess.Popen(r'sdi --ip 192.92.48.32 --fwdl "c:\firmware_image.zip"', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) 

スローされた例外は、「ファイルが見つかりませんでした」である。私はどのようになっておりませんファームウェアファイルがある場所、たとえば 'C'ドライブまたはウィンドウのフォルダの場所に格納されているときにファームウェアファイルのパスを指定します。

+0

'os.system(" sdi --ip 192.92.48.32 --fwdl C:\\ firmware_image.zip ")' – Goyo

答えて

0

sdi実行ファイルが「C:\ ToolsSuite」である場合、これは動作するはずです:

subprocess.call(['sdi', '--ip 192.92.48.32', r'--fwdl "c:\firmware_image.zip"']) 
+0

@jonatan、そうではありません。 'r'のために、一重引用符で囲まれた次の文字列の中にあるものはすべてエスケープされずに生の文字列とみなされます。テストする: 'print r ' - fwdl" c:\ firmware_image.zip "'' –

0

あなたは、Windowsのコマンドを呼び出したい場合は、コマンドのフルパスを与える必要があります。

あなたは試すことができます:

ここ
import subprocess  
import os.path 

# C:\ToolsSuite>sdi --ip 172.23.240.41 --fwdl "c:\BUILDS\firmware_image.zip" 
cmd = os.path.join("C:\\ToolsSuite", "sdi") 
args = [cmd, 
     '--ip', '172.23.240.41', 
     '--fwdl', 'c:\\BUILDS\\firmware_image.zip'] 
subprocess.check_call(args) 

check_callは例外で、ゼロ以外の終了コードを交換するのに便利です。もちろん、同じfamilyの別の機能を選択することもできます。

関連する問題