ฉันลอง googling คำตอบ แต่ก็ไม่มีโชค
ฉันต้องใช้เซิร์ฟเวอร์ supercomputer ในการทำงาน แต่เพื่อให้สคริปต์ python ของฉันทำงานได้จะต้องดำเนินการผ่านเชลล์สคริปต์
ตัวอย่างเช่นฉันต้องการที่job.sh
จะดำเนินการpython_script.py
สิ่งนี้จะสำเร็จได้อย่างไร
ฉันลอง googling คำตอบ แต่ก็ไม่มีโชค
ฉันต้องใช้เซิร์ฟเวอร์ supercomputer ในการทำงาน แต่เพื่อให้สคริปต์ python ของฉันทำงานได้จะต้องดำเนินการผ่านเชลล์สคริปต์
ตัวอย่างเช่นฉันต้องการที่job.sh
จะดำเนินการpython_script.py
สิ่งนี้จะสำเร็จได้อย่างไร
คำตอบ:
เพียงตรวจสอบให้แน่ใจว่าไฟล์ไพ ธ อนทำงานได้ในตัวแปรสภาพแวดล้อม PATH ของคุณจากนั้นเพิ่มสคริปต์ของคุณ
python path/to/the/python_script.py
รายละเอียด:
#!/bin/sh python python_script.py
chmod u+x job.sh
./job.sh
python --version
python3 hello.py
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
มีวิธีรวมรหัสหลามของฉันในบรรทัดในสคริปต์ทุบตีหรือไม่
สมมติว่าคุณมีไฟล์หลามhello.py
สร้างไฟล์ชื่อjob.sh
ที่มี
#!/bin/bash
python hello.py
ทำเครื่องหมายว่าปฏิบัติการได้โดยใช้
$ chmod +x job.sh
จากนั้นเรียกใช้
$ ./job.sh
แก้ไขสคริปต์ของคุณhello.py
และเพิ่มเป็นบรรทัดแรก
#!/usr/bin/env python
ทำเครื่องหมายว่าปฏิบัติการได้โดยใช้
$ chmod +x hello.py
จากนั้นเรียกใช้
$ ./hello.py
#!/usr/bin/env python
ฉันมักจะลืม อย่าลืมตรวจสอบให้แน่ใจว่าคุณกำลังอ้างถึงเส้นทางและเวอร์ชันของไพ ธ อนที่ถูกต้องสำหรับระบบของคุณ!
อิมโฮเขียน
python /path/to/script.py
ค่อนข้างผิดโดยเฉพาะในสมัยนี้ หลามแบบไหน? python2.6? 2.7? 3.0? 3.1? ส่วนใหญ่คุณต้องระบุเวอร์ชันของหลามในแท็ก shebang ของไฟล์ python ฉันขอแนะนำให้ใช้
#! / usr / bin / env python2 # หรือ python2.6 หรือ python3 หรือแม้แต่ python3.1สำหรับความเข้ากันได้
ในกรณีเช่นนี้ดีกว่ามากที่จะเรียกใช้สคริปต์และเรียกใช้โดยตรง:
#! / bin / ทุบตี /path/to/script.py
วิธีนี้เวอร์ชันของ python ที่คุณต้องการจะเขียนในไฟล์เดียวเท่านั้น ที่สุดของระบบวันนี้มี python2 และ python3 ในขณะเดียวกันและมันเกิดขึ้นที่ symlink หลามคะแนนเพื่อpython3ในขณะที่คนส่วนใหญ่คาดหวังว่ามันชี้ไปที่python2
python script.py param
หรือไม่?
บันทึกโปรแกรมต่อไปนี้เป็นprint.py
:
#!/usr/bin/python3
print('Hello World')
จากนั้นในประเภทอาคาร:
chmod +x print.py
./print.py
วิธีนี้ใช้ได้ผลดีที่สุดสำหรับฉัน: เพิ่มที่ด้านบนสุดของสคริปต์:
#!c:/Python27/python.exe
(C: \ Python27 \ python.exe เป็นพา ธ ไปยัง python.exe บนเครื่องของฉัน) จากนั้นเรียกใช้สคริปต์ผ่านทาง:
chmod +x script-name.py && script-name.py
สิ่งนี้ใช้ได้กับฉัน:
สร้างงานเชลล์ไฟล์ใหม่ ดังนั้นสมมติว่า:
touch job.sh
และเพิ่มคำสั่งเพื่อเรียกใช้สคริปต์ไพ ธ อน (คุณสามารถเพิ่มอาร์กิวเมนต์บรรทัดคำสั่งในไพ ธ อนนั้นฉันมักจะกำหนดอาร์กิวเมนต์บรรทัดคำสั่งของฉันไว้ล่วงหน้า)
chmod +x job.sh
ภายใน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"
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 python_file.py
ธรรมดาและเรียบง่าย ขึ้นไปข้างบน>>จะพิมพ์และเก็บเอาท์พุทของไฟล์. py นี้ในไฟล์ testpy-output.txtคุณควรจะเรียกมันได้python scriptname.py
เช่น
# !/bin/bash
python /home/user/scriptname.py
ตรวจสอบให้แน่ใจด้วยว่าสคริปต์มีสิทธิ์ใช้งาน
chmod u+x scriptname.py
คุณสามารถทำให้มันปฏิบัติการโดยใช้
ฉันใช้สิ่งนี้และใช้งานได้ดี
#/bin/bash
/usr/bin/python python python_script.py
เนื่องจากโพสต์อื่น ๆ พูดทุกอย่าง (และฉันสะดุดกับโพสต์นี้ในขณะที่มองหาสิ่งต่อไปนี้)
นี่คือวิธีการเรียกใช้งานสคริปต์ python จากสคริปต์ python อื่น:
Python 2:
execfile("somefile.py", global_vars, local_vars)
Python 3:
with open("somefile.py") as f:
code = compile(f.read(), "somefile.py", 'exec')
exec(code, global_vars, local_vars)
และคุณสามารถจัดหา args โดยการให้บริการอื่น ๆ sys.argv
python python_script.py
เชลล์สคริปต์แล้วหรือยัง?