web-dev-qa-db-ja.com

python codeを使用して.batファイルを実行する

Pythonスクリプトを使用して、Windowsで.batファイルを実行しようとしました。

ask.batファイル:

Application.exe work.xml

Python code:

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

出力:ファイルを実行しようとすると、コマンドプロンプトが点滅するだけで、作業は実行されていません。

注:代替スラッシュも試してみますが、機能しません。

また、ファイルの出力を別のファイルに保存したいと思います。

誰でもスクリプトを実行可能にする方法を提案できますか?.

43
Silver

これについては既にSOで詳細に回答されています。このスレッドをチェックしてください。すべての質問に答えるはずです。 サブプロセスの実行に失敗します

私はこのコードで自分で試しました:

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

前述のスレッドからbatchtest.pyの例を入手しました。

34
das_weezul
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
24
user1176501
  1. 実行が現在の作業ディレクトリに依存しないような方法で.batファイルを書き込むことをお勧めします。つまり、この行を.batファイルの先頭に置くことをお勧めします。

    cd "%~dp0"
    
  2. .batファイルのファイルパスを二重引用符で囲みます。例:

    os.system('"D:\\x\\so here can be spaces\\otr.bat" ["<arg0>" ["<arg1>" ...]]')
    
  3. バッチコマンドの出力を別のファイルに保存するには、通常の リダイレクト構文 を使用できます。例:

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

    または、直接.batファイルで:

    Application.exe work.xml > outputfilename.txt
    
4
tav

パスの\を/に置き換えます

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

おそらくこれを行う最も簡単な方法は->

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

python_test.py

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

これにより、バッチファイルからの出力がpython IDLE /実行コンソールに出力されます。したがって、バッチファイルでは、問題をデバッグするために各ステップで結果をエコーできます。エラーを簡単に理解して特定するために、バッチコールでエラーが発生します。

batch_1.bat

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

あなたはそれを生のままにするだけではありません。問題は「\」にあります。パスの前にrを追加すると、作業が行われます:)

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

だから私はWindows 10でPython 3.7.1(テスト済み):

import subprocess
Quellpfad = r"C:\Users\MeMySelfAndI\Desktop"
Quelldatei = r"\a.bat"
Quelle = Quellpfad + Quelldatei
print(Quelle)
subprocess.call(Quelle)
0
merlinuwe

exe-ファイル内の別のbatファイルを呼び出そうとしている場合。呼び出しているbat-ファイル内でSET Pathを使用する必要があります。 set Pathは、exe-ファイルがあるディレクトリを指す必要があります。

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