2011-03-29 19 views
29

का उपयोग कर एक .bat फ़ाइल चलाएं I Python स्क्रिप्ट का उपयोग कर Windows में .bat फ़ाइल चलाने का प्रयास करें।पायथन कोड

ask.bat फ़ाइल:

Application.exe work.xml 

मैं लिखने अजगर कोड:

import os 
os.system("D:\xxx1\xxx2XMLnew\otr.bat ") 

आउटपुट: जब कोशिश फ़ाइल को चलाने के लिए अपनी बस कमांड प्रॉम्प्ट की एक झपकी देते हैं, और काम से काम नहीं कर ।

नोट: मैं वैकल्पिक स्लैश के साथ भी प्रयास करता हूं, लेकिन यह काम नहीं कर रहा है।

और मैं भी फ़ाइल के आउटपुट को दूसरी फ़ाइल में सहेजना चाहता हूं।

क्या कोई सुझाव दे सकता है कि मैं स्क्रिप्ट को कैसे चला सकता हूं।

+1

क्या आपने बैकस्लैश से बचने का प्रयास किया था? आज़माएं: 'os.system ("D: \\ xxx1 \\ xxx2XMLnew \\ otr.bat") ' – inspectorG4dget

+0

\ n के बजाय इसका उपयोग/अगर आप इसे बचाना नहीं चाहते हैं – EgMusic

उत्तर

23

यह पहले ही एसओ पर विस्तार से उत्तर दिया गया है। इस सूत्र की जाँच करें, यह आपके सभी सवालों के जवाब देने चाहिए: Executing a subprocess fails

मैं इस कोड के साथ यह अपने आप की कोशिश की है:

batchtest.py

from subprocess import Popen 
p = Popen("batch.bat", cwd=r"C:\Path\to\batchfolder") 
stdout, stderr = p.communicate() 

batch.bat

echo Hello World! 
pause 

मुझे बैचटेस्ट मिला है। उपरोक्त धागे से पीई उदाहरण।

+0

हाय das_weezul, जानकारी के लिए धन्यवाद।, मैं कोशिश करता हूं कि क्या वहां उल्लेख किया गया है लेकिन मेरे लिए एक ही समस्या है, निष्पादन पर, ऐप का एक झपकी। तब आ रहा है, कोई काम नहीं – Silver

+0

इस कोड को चलाने के दौरान मैं एक त्रुटि के आसपास आया: "विंडोज़ त्रुटि 2: सिस्टम निर्दिष्ट फाइल नहीं ढूंढ सकता", लेकिन फ़ाइल पथ सही है 100% मैं फ़ोल्डर स्थान को जांचने के लिए स्विच करता हूं आपने कहा .... कोड subprocess आयात से है Popen पी = पॉपन ("test.bat", cwd = r "सी: \ XMLnew") stdout, stderr = p.communicate() – Silver

+3

@ सिल्वर: 'पॉपन () '' test.bat' फ़ाइल नहीं मिल सका। [डॉक्स] में (http://docs.python.org/library/subprocess.html?highlight=popen#subprocess.Popen) यह कहता है "अगर * cwd *' none' नहीं है, तो बच्चे की वर्तमान निर्देशिका बदली जाएगी * cwd * को निष्पादित करने से पहले। ध्यान दें कि निष्पादन योग्य खोजते समय इस निर्देशिका पर विचार नहीं किया जाता है, इसलिए आप ** ** cwd * के सापेक्ष प्रोग्राम के पथ निर्दिष्ट नहीं कर सकते हैं। " – martineau

3

आप bat -file अंदर एक और exe फ़ाइल कॉल करने के लिए कोशिश कर रहे हैं पथ

import os 
os.system("D:/xxx1/xxx2XMLnew/otr.bat ") 
+1

जैसा प्रतीत होता है, मैं os.path.normpath filepath = "D: /xxx1/xxx2XML/otr.bat" पी = Popen (filepath, shell = True, stdout = subprocess.PIPE) stdout, stderr = p.communicate() प्रिंट प्रक्रिया। पुनर्नवीनीकरण # 0 0 है अगर सफलता –

16
import subprocess 

filepath="D:/path/to/batch/myBatch.bat" 
p = subprocess.Popen(filepath, shell=True, stdout = subprocess.PIPE) 

stdout, stderr = p.communicate() 
print p.returncode # is 0 if success 
+0

'shell = True' आपको एक .bat चलाने की अनुमति देता है एक .exe के बजाय फ़ाइल। –

+0

@ बॉबस्टिन-विसीबोन नहीं, यह नहीं है। आप शैल = ट्रू पास किए बिना पॉपन से .bat फ़ाइल को कॉल कर सकते हैं, लेकिन जैसा कि मार्टिनौ ने ऊपर दिए गए उत्तर में नोट किया है, आप _must_ को .bat फ़ाइल के पूर्ण पथ निर्दिष्ट करते हैं। – Nathan

0

में \ के साथ/बदलें। आपको SET Pathbat -file के अंदर उपयोग करना होगा जिसे आप कॉल कर रहे हैं। सेट पथ निर्देशिका वहाँ exe -file स्थित है में इंगित करना चाहिए:

set PATH=C:\;C:\DOS  {Sets C:\;C:\DOS as the current search path.} 
3
  1. यह इस तरह से .bat फ़ाइल में लिखने का है कि इसके चल वर्तमान कार्यशील निर्देशिका पर निर्भर नहीं है बेहतर है, यानी मेरा सुझाव है दोहरे उद्धरण में .bat फ़ाइल के

    cd "%~dp0" 
    
  2. संलग्न करें filepath, अर्थात्: .bat फ़ाइल की शुरुआत में इस लाइन डालने के लिए: अपने .bat फ़ाइल में

    os.system('"...bat" > outputfilename.txt') 
    

    या सीधे:

    os.system('"D:\\x\\so here can be spaces\\otr.bat" ["<arg0>" ["<arg1>" ...]]') 
    
  3. उदाहरण के लिए एक और फाइल में कुछ बैच आदेश के उत्पादन में बचाने के लिए आप हमेशा की तरह redirection syntax उपयोग कर सकते हैं,

    Application.exe work.xml > outputfilename.txt 
    
1

शायद ऐसा करने का सबसे आसान तरीका है ->

import os 
os.chdir("X:\Enter location of .bat file") 
os.startfile("ask.bat") 
+0

अन्य ऑपरेटिंग सिस्टम के बारे में निश्चित नहीं है, लेकिन विंडोज़ पर काम करता है :) –

संबंधित मुद्दे