शेल स्क्रिप्ट: शेल स्क्रिप्ट के भीतर से एक अजगर कार्यक्रम निष्पादित करें


139

मैंने उत्तर को टालने की कोशिश की है लेकिन कोई भाग्य नहीं है।

मुझे अपने कार्यों को सुपर कंप्यूटर सर्वर का उपयोग करने की आवश्यकता है, लेकिन मेरे पायथन स्क्रिप्ट को चलाने के लिए, इसे शेल स्क्रिप्ट के माध्यम से निष्पादित किया जाना चाहिए।

उदाहरण के लिए मैं job.shनिष्पादित करना चाहता हूंpython_script.py

इसे किस तरह पूर्ण कर सकते है?


2
क्या आपने python python_script.pyअपनी शेल स्क्रिप्ट में सिर्फ डालने की कोशिश की है ?
thkala

उम, python python_script.py। या सिर्फ ./python_script.pyअगर स्क्रिप्ट को एक शेबंग मिला।

2
@delnan :/python_script.py के लिए यह भी आवश्यक है कि स्क्रिप्ट निष्पादन योग्य हो
thkala

वास्तव में आपने क्या प्रयास किया है और क्या समस्या है? या तो आपने गूगल सर्च का अच्छा नहीं किया, या ऐसा बहुत कुछ है जो आप हमें नहीं बता रहे हैं ...
thkala

3
यह एक पुराना सवाल है, लेकिन सबसे अच्छा / सबसे अच्छा जवाब जोओ वीक्टर द्वारा दिया गया है। नीचे पढ़ने के लिए सुनिश्चित करें।
फिर भी

जवाबों:


193

बस यह सुनिश्चित करें कि अजगर निष्पादन योग्य आपके PATH पर्यावरण चर में है तब अपनी स्क्रिप्ट में जोड़ें

python path/to/the/python_script.py

विवरण:

  • फ़ाइल job.sh में, इसे डालें
#!/bin/sh
python python_script.py
  • स्क्रिप्ट को आपके लिए चलाने योग्य बनाने के लिए इस आदेश को निष्पादित करें: chmod u+x job.sh
  • चलाओ : ./job.sh

2
यह आपके सिस्टम पर निर्भर करता है। पायथन 3 डिफ़ॉल्ट पायथन रनटाइम हो सकता है, या नहीं भी हो सकता है। आप चलाकर जांच कर सकते हैं python --version, और आप संस्करण को लागू कर सकते हैं python3 hello.py
जीन-बर्नार्ड जानसन

यदि यह पहले से स्थापित आयातों जैसे पंडों को नहीं मिला तो क्या करें?
माह ६५

इसका मतलब है कि आपने गलत अजगर बाइनरी लॉन्च किया है या पर्यावरण सही नहीं है। उस मामले में, आप एक virtualenv पॉप्युलेट करना चाहिए, फिर चला source PATH/TO/VENV/bin/activateतो फोनpython python_script.py
जीन बर्नार्ड जेंसन

मैं ऑटोमोटिव में ऐसा करने की कोशिश कर रहा हूं, और मुझे एक त्रुटि मिल रही है; /path/to/Python: can't open file '/path/to/script': [Errno 1] Operation not permittedबैश स्क्रिप्ट के भीतर मेरे अजगर कोड इन-लाइन को शामिल करने का एक तरीका है?
कीस्लिंगर

111

विधि 1 - एक शेल स्क्रिप्ट बनाएँ:

मान लीजिए कि आपके पास एक अजगर फाइल है hello.py job.sh है, जिसमें एक फाइल बनाएं , जिसमें यह शामिल है

#!/bin/bash
python hello.py

यह प्रयोग करने योग्य निष्पादन योग्य है

$ chmod +x job.sh

फिर इसे चलाएं

$ ./job.sh

विधि 2 (बेहतर) - अजगर को स्वयं शेल से चलाएं:

अपनी स्क्रिप्ट को संशोधित करें hello.pyऔर इसे पहली पंक्ति के रूप में जोड़ें

#!/usr/bin/env python

यह प्रयोग करने योग्य निष्पादन योग्य है

$ chmod +x hello.py

फिर इसे चलाएं

$ ./hello.py

5
कृपया इसे और अधिक पठनीय बनाने के लिए अपने उत्तर को संपादित करें। स्क्रिप्ट सामग्री को कोड के रूप में चिह्नित करने के लिए आप उत्तर संपादक में 101010 बटन का उपयोग कर सकते हैं।
थकाला

1
मैं हमेशा भूल जाता हूं #!/usr/bin/env python। यह सुनिश्चित करने के लिए याद रखें कि आप अपने सिस्टम के लिए सही पायथन संस्करण + पथ का संदर्भ दे रहे हैं!
15

10

इम्हो, लेखन

python /path/to/script.py

काफी गलत है, खासकर इन दिनों में। कौन सा अजगर? python2.6? 2.7? 3.0? 3.1? अधिकांश बार आपको अजगर फ़ाइल के शेबंग टैग में अजगर संस्करण को निर्दिष्ट करने की आवश्यकता होती है। मैं उपयोग करने के लिए प्रोत्साहित करता हूं

# /! usr / bin / env python2 #or python2.6 या python3 या यहां तक ​​कि python3.1
अनुकूलता के लिए।

ऐसे मामले में, स्क्रिप्ट को निष्पादित करने के लिए बेहतर है और इसे सीधे लागू करें:

#! / Bin / bash

/path/to/script.py

इस तरह आपके लिए आवश्यक अजगर का संस्करण केवल एक फ़ाइल में लिखा गया है। प्रणाली के अधिकांश इन दिनों इस बीच में को Python2 और python3 कर रहे हैं, और ऐसा होता है सिमलिंक कि अजगर को अंक python3 , जबकि ज्यादातर लोगों को यह की ओर इशारा करते उम्मीद को Python2


1
क्या आप मापदंडों को उसी तरह से पारित कर सकते हैं जैसे कि python script.py param?
क्रिस्चियन

./abc.py -h

7

निम्न प्रोग्राम को इस प्रकार सहेजें print.py:

#!/usr/bin/python3
print('Hello World')

फिर टर्मिनल प्रकार में:

chmod +x print.py
./print.py

4

यह मेरे लिए सबसे अच्छा काम करता है: इसे स्क्रिप्ट के शीर्ष पर जोड़ें:

#!c:/Python27/python.exe

(C: \ Python27 \ python.exe मेरी मशीन पर python.exe का पथ है) फिर स्क्रिप्ट को इसके माध्यम से चलाएं:

chmod +x script-name.py && script-name.py

बस स्पष्ट करने के लिए, यह विंडोज-विशिष्ट है। और जो प्रॉम्प्ट मैं इस्तेमाल कर रहा हूं वह गिट बैश है। मुझे यह सुपर उपयोगी लगता है। विशेष रूप से विंडोज वातावरण में
4

4

यह मेरे लिए काम करता है:

  1. एक नया शेल फ़ाइल कार्य बनाएँ। तो चलिए touch job.shबताते हैं: और अजगर स्क्रिप्ट को चलाने के लिए कमांड जोड़ें (आप उस अजगर के लिए कमांड लाइन तर्क भी जोड़ सकते हैं, मैं आमतौर पर मेरी कमांड लाइन तर्क को पूर्वनिर्धारित करता हूं)।

    chmod +x job.sh

  2. अंदर job.shनिम्नलिखित py फ़ाइलें जोड़ने, चलो कहते हैं:

    python_file.py argument1 argument2 argument3 >> testpy-output.txt && echo "Done with python_file.py"

    python_file1.py argument1 argument2 argument3 >> testpy-output.txt && echo "Done with python_file1.py"

Job.sh का आउटपुट इस तरह दिखना चाहिए:

Done with python_file.py

Done with python_file1.py

मैं आमतौर पर इसका उपयोग तब करता हूं जब मुझे विभिन्न तर्कों के साथ कई अजगर फाइलों को चलाना पड़ता है, पूर्व निर्धारित।

नोट: यहाँ क्या हो रहा है, बस एक त्वरित सिर:

python_file.py argument1 argument2 argument3 >> testpy-output.txt && echo "completed with python_file.py" . 

  • यहाँ शेल स्क्रिप्ट python_file.py फ़ाइल चलाएगा और पायथन फ़ाइल के लिए समय पर कई कमांड-लाइन तर्क जोड़ देगा ।
  • यह आवश्यक रूप से इसका मतलब नहीं है, आपको कमांड लाइन तर्क भी पास करना होगा।
  • आप इसे बस उपयोग कर सकते हैं जैसे: python python_file.pyसादा और सरल। इसके बाद, >> testpy-output.txt फ़ाइल में इस .py फ़ाइल के आउटपुट को प्रिंट और स्टोर करेगा।
  • && एक तार्किक ऑपरेटर है, जो ऊपर दिए गए सफलतापूर्वक पूरा होने के बाद ही चलेगा और एक वैकल्पिक गूंज के रूप में "python_file.py के साथ पूरा" आपके क्ली / टर्मिनल पर रन टाइम पर गूँज जाएगा।

4

आप इसे python scriptname.pyउदाहरण के लिए लागू करने में सक्षम होना चाहिए

# !/bin/bash

python /home/user/scriptname.py 

यह भी सुनिश्चित करें कि स्क्रिप्ट को चलाने की अनुमति है।

आप उपयोग करके इसे निष्पादन योग्य बना सकते हैं chmod u+x scriptname.py


2

मैं इसका उपयोग करता हूं और यह ठीक काम करता है

#/bin/bash
/usr/bin/python python python_script.py

1

चूंकि अन्य पोस्ट सब कुछ कहती हैं (और मैं इस पोस्ट पर निम्नलिखित की तलाश करते हुए ठोकर खाई)।
यहाँ एक तरीका है कि किसी अन्य लिपि से एक अजगर लिपि को कैसे निष्पादित किया जाए:

अजगर 2:

execfile("somefile.py", global_vars, local_vars)

अजगर 3:

with open("somefile.py") as f:
    code = compile(f.read(), "somefile.py", 'exec')
    exec(code, global_vars, local_vars)

और आप कुछ अन्य प्रदान करके आर्ग्स की आपूर्ति कर सकते हैं sys.argv

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.