python - पायथन में बैश कमांड चलाना




bash (4)

आदेशों को निष्पादित करने के लिए पैरामीटर-सी के साथ, आप बैश प्रोग्राम का उपयोग करना संभव है:

bashCommand = "cwm --rdf test.rdf --ntriples > test.nt"
output = subprocess.check_output(['bash','-c', bashCommand])

मेरी स्थानीय मशीन पर मैं एक पायथन स्क्रिप्ट चलाता हूं जिसमें यह रेखा होती है

bashCommand = "cwm --rdf test.rdf --ntriples > test.nt"
os.system(bashCommand)

यह ठीक काम करता है।

फिर मैं एक ही कोड को सर्वर पर चलाता हूं और मुझे निम्न त्रुटि संदेश मिलता है

'import site' failed; use -v for traceback
Traceback (most recent call last):
File "/usr/bin/cwm", line 48, in <module>
from swap import  diag
ImportError: No module named swap

तो मैंने तब क्या किया है, मैंने एक "प्रिंट बैश कमांड" डाला है जो मुझे प्रिंसिपल में आदेश देता है इससे पहले कि यह os.system () के साथ चलता है।

बेशक मुझे फिर से त्रुटि मिलती है (os.system (bashCommand) के कारण) लेकिन उस त्रुटि से पहले यह टर्मिनल में कमांड प्रिंट करता है। तब मैंने बस उस आउटपुट की प्रतिलिपि बनाई और टर्मिनल में कॉपी कॉपी पेस्ट किया और एंटर दबाएं और यह काम करता है ...

क्या किसी के पास कोई सुराग है कि क्या हो रहा है :(?


आप 'सबप्रोसेस' का उपयोग कर सकते हैं, लेकिन मुझे हमेशा लगा कि यह ऐसा करने का 'पायथनिक' तरीका नहीं था। इसलिए मैंने सुल्तान (लापरवाह प्लग) बनाया जो कमांड लाइन फ़ंक्शंस को चलाने में आसान बनाता है।

https://github.com/aeroxis/sultan


ऐसा करने का पाइथोनिक तरीका subprocess.Popen का उपयोग कर रहा है

subprocess.Popen एक सूची लेता है जहां पहला तत्व चलाने के लिए कमांड होता है जिसके बाद कोई कमांड लाइन तर्क होता है।

उदहारण के लिए:

import subprocess

args = ['echo', 'Hello!']
subprocess.Popen(args) // same as running `echo Hello!` on cmd line

args2 = ['echo', '-v', '"Hello Again"']
subprocess.Popen(args2) // same as running 'echo -v "Hello Again!"` on cmd line

त्रुटि के अनुसार आप सर्वर पर स्वैप नामक पैकेज खो रहे हैं। यह /usr/bin/cwm आवश्यकता है। यदि आप उबंटू / डेबियन पर हैं, तो python-swap का उपयोग करके python-swap इंस्टॉल करें।







bash