2014-09-03 7 views
12

नहीं है, मैं उपप्रकार के साथ अजगर दुभाषिया के भीतर से एक पाइथन फ़ाइल "hello.py" कॉल करने का प्रयास कर रहा हूं। लेकिन मैं इस त्रुटि को हल करने में असमर्थ हूं। [पायथन 3.4.1]।ओएसईआरआर: [WinError 1 9 3]% 1 मान्य Win32 अनुप्रयोग

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 

क्या उपप्रोसेस का उपयोग करने के अलावा "तर्क के साथ एक अजगर स्क्रिप्ट को कॉल करने का कोई वैकल्पिक तरीका भी है? अग्रिम धन्यवाद।

उत्तर

15

त्रुटि बहुत स्पष्ट है। फ़ाइल hello.py निष्पादन योग्य फ़ाइल नहीं है। आप निष्पादन योग्य निर्दिष्ट करना होगा:

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

आप python.exe जरूरत खोज पथ पर दिखाई दे सकता है, या आप कॉल स्क्रिप्ट चल रही है कि निष्पादन योग्य फ़ाइल का पूर्ण पथ गुजर सकता है:

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

"त्रुटि बहुत स्पष्ट है।" आज मैंने सीखा कि "स्पष्ट" शब्द के लिए एक नया अर्थ है। –

+3

त्रुटि संदेश esp है। * नहीं * स्पष्ट क्योंकि यह किसी कारण से '% 1' को 'hello.py' में हल नहीं करता है। आईएमओ जो पायथन में एक बग है। – sschuberth

+0

@sschuberth पाइथन ऐसा कैसे करेगा? यह पायथन नहीं है जो त्रुटि का सामना करता है। यह 'subprocess' मॉड्यूल है। इसे त्रुटि कोड की जांच करनी होगी और केवल इस विशिष्ट त्रुटि के लिए प्रतिस्थापन स्ट्रिंग की आपूर्ति करनी होगी। मुझे बहुत कम कार्यक्रमों के बारे में पता है जो ऐसा करते हैं। –

6

पायथन इंस्टॉलर आमतौर पर सिस्टम के साथ .py फाइलों को पंजीकृत करते हैं। आप खोल स्पष्ट रूप से चलाते हैं, यह काम करता है:

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

आप के साथ

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

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

मुझे याद दिलाने के लिए धन्यवाद कि 'shell = True' हमेशा एक विकल्प है जब 'subprocess' रहस्यमय रूप से असफल हो रहा है! यह प्रश्न मेरे मुद्दे से असंबंधित है (मेरे पास एक वास्तविक विंडोज निष्पादन योग्य है, यह किसी कारण से नहीं चलेगा ... इससे कोई फर्क नहीं पड़ता कि मैं दुभाषिया के 32 बिट या 64 बिट संस्करण का उपयोग करता हूं), लेकिन आपका सुझाव 'खोल = सही' काम का उपयोग कर! – ArtOfWarfare

0

मैं एक ही त्रुटि मिली, जबकि मैं subprocess.call में shell=True उपयोग करने के लिए भूल गया कमांड लाइन पर अपने फ़ाइलों के समूह देख सकते हैं।

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)

संबंधित मुद्दे