2011-12-06 5 views
1

これはpythonスクリプトが行うことです。問題は関数内で外部のcmdファイルを呼び出す方法ですか?pythonスクリプト内でcmdファイルを呼び出す方法

  • ディレクトリ内のCSVファイルを読み取ります。
  • 6列の内容が「承認済み」に等しい場合には、その後、 外部窓のスクリプトを呼び出し「TransferProd.cmd」

def readCSV(x): 
    #csvContents is a list in the global scope that will contain lists of the 
    #items on each line of the specified CSV file 
    try: 
     global csvContents 
     file = open(csvDir + x + '.csv', 'r')  #Opens the CSV file 
     csvContents = file.read().splitlines()  #Appends each line of the CSV file to csvContents 
     #---------------------------------------------------------------------- 
     #This takes each item in csvContents and splits it at "," into a list. 
     #The list created replaces the item in csvContents 
     for y in range(0,len(csvContents)): 
      csvContents[y] = csvContents[y].lower().split(',') 
     if csvContents[y][6] == 'approved': 
      ***CALL TransferProd.cmd*** 
      file.close() 
     return 
    except Exception as error: 
     log(logFile, 'An error has occurred in the readCSV function: ' + str(error)) 
     raise 
+0

あります多くのソリューション。それでは、http://stackoverflow.com/questions/89228/how-to-call-external-command-in-pythonのようないくつかの質問を見て、http://www.doughellmann.com/PyMOTW/subprocess/を見てください。 – pyfunc

答えて

1
import os 
os.system('TransferProd.cmd') 

それがシェルにコマンドを送信、これは、両方のUNIX/Windowsのフレーバーで動作します。しかし、戻り値にはいくつかのバリエーションがあります。チェックhere

+0

TransferProd.cmdのディレクトリパスを指定する方法は? os.chdir(cmdDir)か直接コードに渡すことはできますか? –

+0

私はos.systemから離れようとします。ハードコーディングされた文字列を使用していない限り、プログラムは非常に注入しやすいでしょう。例: 'os.system( './ somescript' + filename)'と与えられた入力は 'file.txtです。 rm -rf〜 'です。プログラミングスクリプトのほんの少しのバーストであれば便利ですが、それを否定するものではありません。 – Kupiakos

2

subprocess moduleをご覧ください。

import subprocess 
p = subprocess.Popen(['TransferProd.cmd']) 

あなたは出力/エラーが(直接ファイルライクオブジェクトファイルまたはに)行きたい場所あなたは、などの入力でパイプを、指定することができ

+0

TransferProd.cmdの場所の指定方法は?私はos.chdir(cmdDir)を使うか、[D:\ cmdDir \ TransferProd.cmd]の[D: –

+0

]に直接渡しますか? –

+0

どちらの方法でも動作するはずです( '['D:\ cmdDir \ TransferProd.cmd']')。 – Snago

0
  1. あなたが必要としない場合あなたが使用できるコマンドの出力:os.system(CMD)
  2. より良い解決策を使用することです:

    from subprocess import Popen, PIPE 
    proc = Popen(cmd, shell = True, close_fds = True) 
    stdout, stderr = proc.communicate() 
    
関連する問題