2011-12-06 48 views
1

這是python腳本會做的。問題是如何在函數內調用外部cmd文件?如何在python腳本中調用cmd文件

  • 讀取目錄中的CSV文件。
  • 如果在第6列中的內容等於「批准」,然後調用一個 外部Windows腳本「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的位置? Shold我使用os.chdir(cmdDir)或直接傳入[D:\ –

+0

[D:\ cmdDir \ TransferProd.cmd]? –

+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() 
    
相關問題