Soru Python kodunu kullanarak bir .bat dosyasını çalıştırın.


Koşmaya çalışıyorum .bat Python komut dosyasını kullanarak Windows'da dosya.

ask.bat dosya:

Application.exe work.xml

Python kodunu yazarım:

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

Çıktı: dosyayı çalıştırmayı denediğinde, sadece komut isteminin bir göz kırpmasını verin ve çalışma yapılmıyor.

Not: Alternatif eğik çizgi ile de deniyorum, ama çalışmıyor.

Ve ayrıca dosyanın çıkışını başka bir dosyada kaydetmek istiyorum.

Birisi betiği nasıl çalıştırabilirim diye önerebilir.


32
2018-03-29 07:37


Menşei


Ters eğik çizgi kaçmayı denediniz mi? Deneyin: os.system("D:\\xxx1\\xxx2XMLnew\\otr.bat ") - inspectorG4dget
Kaçmak istemiyorsanız \ yerine / kullanın - EgMusic


Cevaplar:


Bu, SO üzerinde ayrıntılı olarak cevaplandırılmıştır. Bu konuyu gözden geçir, tüm sorularınızı cevaplamalı: Bir alt işlemi yürütmek başarısız oluyor

Bu kodla kendim denedim:

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

Yukarıda belirtilen iş parçacığından batchtest.py örneği var.


26
2018-03-29 07:49



Merhaba das_weezul, bilgi için teşekkürler., Ben orada belirtilen denemek deneyin ama benim için aynı sorun devam ediyor, uygulama, bir göz kırpma. o zaman dışarı geliyor, iş yok - Silver
Bu kodu çalıştırırken bir hatayla karşılaştım: "Windows Hata 2: Sistem belirtilen dosyayı bulamıyor", ancak dosya yolu doğruydu 100% dediğim şeyi test etmek için klasör konumunu değiştiriyorum .... kod alt işlemden import Popen p = Popen ("test.bat", cwd = r "C: \ XMLnew") stdout, stderr = p.communicate () - Silver
@Gümüş: Popen() bulamıyorum test.bat dosya. İçinde docs diyor ki "eğer cwd değil Noneçocuğun mevcut dizini şu şekilde değişir: cwd idam edilmeden önce. Yürütülebilir dosyayı ararken bu dizinin dikkate alınmadığını unutmayın. olamaz programın yolunu cwd." - martineau
@martineau Mutlak olan "C: \ XMLnew" yolunu kullandı, bu yüzden sorun olmamalı - das_weezul
@das_weezul: Evet, ama "test.bat" göreli. - martineau


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

18
2017-12-10 15:05



shell=True .exe yerine bir .bat dosyası çalıştırmanıza izin verir. - Bob Stein
@ BobStein-VisiBone hayır, öyle değil. Popen'den .bat dosyasını shell = True yazmadan arayabilirsin, ama Martineau yukarıdaki cevaba not düşerken, şart .bat dosyasının mutlak yolunu belirtin. - Nathan


Yolla \ ile / değiştir

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

4
2018-01-06 17:13



os.path.normpath filepath = "D: /xxx1/xxx2XML/otr.bat" p = Popen (filepath, shell = True, stdout = subprocess.PIPE) stdout, stderr = p.communicate () yazdırma işlemini kullanmanızı öneririm. başarı kodu # 0 ise başarıdır


  1. Yazmak daha iyidir .bat Dosya, çalışmanın mevcut çalışma dizinine bağlı olmayacağı şekilde, yani, bu satırın başına koymanızı öneririm. .bat dosya:

    cd "%~dp0"
    
  2. Dosya yolunu kapat .bat çift ​​tırnak içinde dosya, yani:

    os.system('"D:\\x\\so here can be spaces\\otr.bat" ["<arg0>" ["<arg1>" ...]]')
    
  3. Bazı toplu iş komutlarının çıktısını başka bir dosyaya kaydetmek için her zamanki gibi yönlendirme sözdizimi, Örneğin:

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

    Veya doğrudan sizin .bat dosya:

    Application.exe work.xml > outputfilename.txt
    

4
2018-03-09 02:21





Muhtemelen bunu yapmanın en basit yolu ->

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

2
2017-11-23 13:57



Diğer işletim sistemleri hakkında emin değilim, ancak pencereler üzerinde çalışıyor :) - outcast_dreamer


Başka birisini aramaya çalışıyorsan exe içinde dosya bat-dosya. Kullanmalısın SET Path içinde bat-Sen aradığın dosya. Yol, oradaki dizine işaret etmelidir exe-file bulunur:

set PATH=C:\;C:\DOS     {Sets C:\;C:\DOS as the current search path.} 

0
2018-06-17 15:13





python_test.py 

import subprocess
a = subprocess.check_output("batch_1.bat")
print a

Bu, toplu iş dosyasından çıktı dosyasının python IDLE / çalışan konsoluna yazdırılmasını sağlar. Toplu iş dosyasında, her adımda sonucu hata ayıklamak için sonuçları yankılayabilirsiniz. Bu, aynı zamanda, toplu çağrıda bir hata olduğunda, hatayı kolayca anlamak ve bulmak için otomasyonda da yararlıdır (her şeyi yazdırmaktan kaçınmaya başlayan toplu iş dosyasında "echo off" yaz)

batch_1.bat

echo off    
echo "Hello World" 
md newdir 
echo "made new directory"

0
2018-05-07 05:43