2014-09-03 95 views
12

Bir python dosyası "hello.py" dosyasını alt işlemle python yorumlayıcısından çağırmaya çalışıyorum. Ancak bu hatayı çözemiyorum. [Python 3.4.1].OSError: [WinError 193]% 1 geçerli bir Win32 uygulaması değil

import subprocess  
subprocess.call(['hello.py', 'htmlfilename.htm']) 
Traceback (most recent call last): 
    File "<pyshell#42>", line 1, in <module> 
    subprocess.call(['hello.py', 'htmlfilename.htm']) 
    File "C:\Python34\lib\subprocess.py", line 537, in call 
    with Popen(*popenargs, **kwargs) as p: 
    File "C:\Python34\lib\subprocess.py", line 858, in __init__ 
    restore_signals, start_new_session) 
    File "C:\Python34\lib\subprocess.py", line 1111, in _execute_child 
    startupinfo) 
OSError: [WinError 193] %1 is not a valid Win32 application 

Ayrıca alt işlemi kullanarak dışındaki "bağımsız değişken içeren bir python komut çağırmak" için herhangi bir alternatif yol var? Şimdiden teşekkürler.

cevap

15

Hata oldukça açık. hello.py dosyası yürütülebilir bir dosya değil. Sen yürütülebilir belirtmek gerekir:

subprocess.call(['python.exe', 'hello.py', 'htmlfilename.htm']) 

Sen arama yolunda görünür olmasını python.exe gerektiğini, aksi aradığınız komut dosyası çalıştıran yürütülebilir dosyanın tam yolunu geçebileceği:

import sys 
subprocess.call([sys.executable, 'hello.py', 'htmlfilename.htm']) 
+61

"hata oldukça açıktır." Bugün "temiz" kelimesi için yeni bir anlam olduğunu öğrendim. –

+3

Hata mesajı esp. * net değil * çünkü belli bir nedenle '% 1'' 'hello.py''ye çözümlemiyor. IMO, Python'da bir hata. – sschuberth

+0

@sschuberth Python bunu nasıl yapar? Hatayı karşılaştıran Python değil. Bu "alt işlem" modülüdür. Hata kodunu kontrol etmek ve sadece bu özel hata için bir ikame dizisi sağlamak zorunda kalacaktı. Bunu yapan çok az program biliyorum. –

6

Python yükleyicileri genellikle .py dosyalarını sisteme kaydeder. Açıkça kabuk çalıştırırsanız, çalışır:

import subprocess 
subprocess.call(['hello.py', 'htmlfilename.htm'], shell=True) 
# --- or ---- 
subprocess.call('hello.py htmlfilename.htm', shell=True) 

Sen subprocess.call içinde shell=True kullanmayı unuttum ederken aynı hata var

C:\>assoc .py 
.py=Python.File 

C:\>ftype Python.File 
Python.File="C:\Python27\python.exe" "%1" %* 
+1

Beni hatırlattığın için 'shell = True' her zaman altprocessin gizemli bir şekilde başarısız olduğu bir seçenek! Bu soru benim sorunumla ilgili değil (gerçek bir Windows çalıştırılabilirim var, sadece bir sebepten dolayı çalıştırılamıyor ... tercümanın 32 bit veya 64 bit sürümünü kullanmam sorun değil) 'shell = True' kullanarak çalışır! – ArtOfWarfare

0

ile komut satırında dosya ilişkilendirmeleri kontrol edebilirsiniz.

subprocess.call('python modify_depth_images.py', shell=True) 

Running External Command

To run an external command without interacting with it, such as one would do with os.system(), Use the call() function.

import subprocess

Simple command subprocess.call(['ls', '-1'], shell=True)

İlgili konular