2013-01-15 19 views
5

Başka bir yürütülebilir dosyayı arayacak olan başlangıçta bir yürütülebilir dosyayı çağırmaya çalışıyorum. İlk kısımda, sadece çalıştırılabilir dosyaya yolunu HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run'a ekledim.Subprocess.Popen(): cmd kabuğunu gizler

startupinfo = subprocess.STARTUPINFO() 
startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW 
startupinfo.wShowWindow = subprocess.SW_HIDE 
proc = subprocess.Popen(command, startupinfo=startupinfo) 

Bununla birlikte, bir komut kabuğu (Cmd) bilgisayar başlatıldığında açar:

ikinci diğerleri arasında, bu çizgiler içermektedir. Her şey iyi çalışıyor, ancak gizli yerine görünür ... Bu yüzden temel olarak bu komut kabuğunu nasıl gizlerim?

ProcessExplorer kullanarak, aşağıdaki hiyerarşi var: Burada

+ System 
|_ Interrupts 
|_ smss.exe 
    |_ some processes... 
+ explorer.exe 
    |_ some processes... 
|_ MYSCRIPT.EXE 

elde etmek deneyin dizisidir:

  • Ben içeren bir ISO dosyası oluşturmak tüm Ben çalıştırmak istediğiniz Python çalıştırılabilir VM'de. Bunlardan biri (master.exe) diğerlerini çağırır.
  • otomatik olarak ikinci
  • hazırlanmıştır VM, montaj VM oluşturmak sahiptir (burada bizi hiç ilgilendirmez diğer görevler arasında) D:\master.exe
  • master.exe çağıran bir zamanlanmış görev D:\myscript.exeHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run değer katan
  • VM
  • D:\myscript.exe çalıştırılır yeniden başlatılır (ve iyi çalışıyor ve katıldığı gibi), ancak ben görünmez olmak istiyorum bir komut isteminde, çalıştırmak gelmez.
+0

için

setup(console=['__main__.py'], options={"py2exe":{"includes":["sip"]}}) 

den (derlemek için kullanılan) piridin dosyası, VBScript ile (.run yöntemi) çalıştırmak bir işlem penceresini gizlemek için kullanılır. Ama benziyor, python size doğal bir yol sunuyor. :-) – anishsane

+0

related: [os.system() veya subprocess.call() kullandığımda konsolu nasıl gizlerim?] (Http://stackoverflow.com/q/7006238/4279) – jfs

cevap

3

Bu, Python programcılarının karşılaştığı tipik bir sorundur - ve bu nedenle Python'un kendisi tarafından bir çözüm önerilmektedir. Birçok kez, örneğin, here numaralı telefondan sorulmuştur, fakat sizin için sorun biraz daha karmaşıktır.

Komut dosyanızı çalıştırmak için python.exe veya pythonw.exe kullanıp kullanmadığınızla ilgilidir. Birincisi için, bir konsol açılır, ikincisi için değil.

Derlenmiş komut dosyalarını kullandığınızda, kullanmak istediğiniz sürümü "derleyiciye" söylemeniz gerekir. Py2exe'yi kullandığınızı varsayarak, this post on SO'a bakabilirsiniz. Burada nasıl devam edeceği ayrıntılı olarak açıklanmaktadır.

+0

Bu yalnızca python işlemiyle ilgili konsol penceresi için geçerlidir (hata ayıklama bilgilerini gösterir vb.). Popen ile konsolla ilgili bir alt işlem açmakla ilgisi yoktur. Zaten birçok kez test edildi. Yapabileceğiniz tek şey, SHELL = dezavantajlı True flag ile çalışmaktır, alt işlemden gelen istisnalar/hatalar üzerinde herhangi bir kontrole sahip olmazsınız. Hiç bir bilgi almayacaksın. Örneğin, alt işlemin sistem tarafından yüklenmemiş olması durumunda, diskteki exe dosyasını bulamıyorsa, sistem size söylemeyecektir. Çok kullanışlı değil. – Jomme

1

Açılmakta olan konsol penceresi, muhtemelen komut dosyanızı çalıştıran Python işlemine aittir. Komut dosyanızı çalıştıran kayıt defterindeki girişi gösterin.

+2

@NNzz Değer nedir HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Run'ın ilk çalıştırılabilirinizi çalıştırıyor? Lütfen tam olarak ne tür yürütülebilir dosyalarınız olduğunu açıklayın; Onlar Python betikleri veya derlenmiş Python betikleri veya bazı kombinasyonları mı? –

+0

Bunlar bir yürütülebilir dosya olarak derlediğim Python betikleridir. Anahtarın değeri, çalıştırmak istediğim yürütülebilir dosyanın gerçek yeri olan 'D: \ myscript.exe'dir. Daha hassas olmak için gönderime bazı bilgiler ekleyeceğim. –

0

Bir konsol programı çalıştırırsanız, Windows bir konsol penceresi oluşturur. "python.exe" bir konsol programıdır.

Konsol penceresi istemiyorsanız, Python komut dosyasını "python.exe" yerine "pythonw.exe" ile çalıştırabilirsiniz.

0

Bunu exe biçiminde derleyebilirsiniz. Bu sorunla karşılaştığımda, python dosyasını görünmez yürütücüye derlemek için py2exe kullanmıştım .

Yapmanız gereken tek şey, kurulumu değiştirmek.Genel bir kural olarak

setup(windows=['__main__.py'], options={"py2exe":{"includes":["sip"]}})