2012-07-30 8 views
6

, Şu anda bir 'duraklama' ile biten ve kullanıcı için isteyen bir yarasa komut dosyası çalıştırıyorum 'Press Devam etmek için bir tuşa ...'devre dışı bırak 'pause' pencerelerinde

Ben Bu senaryoda dosyayı düzenleyemiyorum ve asla gelmeyecek girdiyi beklemeye asılmak yerine betiğin sonlandırılmasını istiyorum. Sorunu devre dışı bırakacak veya engelleyecek bir yolu var mı?

Girişteki boruları denedim ve yardımcı olmadı. Bu betik altprocess.Popen ile python'dan çalıştırılıyor.

+0

Ben pause' yerleşik olan 'cmd' tercümana bir komuttur' inanıyoruz pencerelerde nul girdi yönlendirme misiniz Bu yüzden onu değiştirmek imkansız olacak. Aksi takdirde, bir 'pause.exe 'oluşturabilir ve yolun önüne yerleştirebilirsiniz. –

+0

Girdi neden boru çalışmıyor neden anlamıyorum, komut satırından yönlendirebilirsiniz: pause

cevap

11

cmd.exe /c YourCmdFile < nul

YourCmdFile yürütmek deneyin - tam yolu toplu komut dosyası

+1

+ 1, Ama cmd.exe gerek yoktur. Sadece komut dosyasını doğrudan çalıştırın: 'script.bat dbenham

+0

"Bu betik python'dan subprocess.Popen ile çalıştırılıyor" nedeniyle 'cmd/c' seçeneğini öneririm. Emin değilim, python betikleri nasıl çalıştırır. – Maximus

4

için Bu bir ağrı biraz olduğu ortaya çıktı. Maximus'tan nul'un yönlendirmesi harika çalıştı, teşekkürler!

Bunu python içinde çalışmak için gelince, aşağıdakine geldi.

BINARY = "C:/Program Files/foo/bar.exe" 
subprocess.call([BINARY]) 

yönlendirmeyi eklemek için çalıştı ama subprocess.call çok iyi her şey kaçar ve biz yönlendirme gevşek: Ben ile başladı. kabuk kullanarak

subprocess.call([BINARY + " < nul"]) 
subprocess.call([BINARY, " < nul"]) 
subprocess.call([BINARY, "<", "nul"]) 

= SAYISAL uzay o yürütülebilir bulmaya çalışırken boğması yapılan çünkü işe yaramadı doğrudur.

subprocess.call([BINARY + " < nul"], shell=True) 

Sonunda, os sistemime geri başvurmalı ve yönlendirme için kendimden ayrıldım.

os.system(quote(BINARY) + " < nul") 

İdeal değil, ancak iş bitiyor.

Son alt işlem örneğinin ikili boşlukta nasıl çalışacağını bilen biri varsa, bu çok belirgin olur!

2
subprocess.call("mybat.bat", stdin=subprocess.DEVNULL) 

mybat.bat arayıp (diğer yanıtlar gösterildiği gibi duraklama devre dışı bırakır)

+1

Yalnızca Python 3'te çalıştığını unutmayın. Python 2.x'te, devnull (örneğin, devnull = open (os.devnull, 'r') ') için bir dosya tanıtıcısı almanız ve bunu stdin yerine geçirmeniz gerekir. –

+0

@BrentNash iyi yakalama. Python2/3 uyumluluğunu kullanmaya başladım. Kaynak sızıntılarından kaçınmak için işiniz bittiğinde dosyayı kapattığınızdan emin olun (bu durumda Python 3 için bir uyarı verilir). –