Shell Script: Thực thi chương trình python từ trong shell script


139

Tôi đã thử googling câu trả lời nhưng không có may mắn.

Tôi cần sử dụng máy chủ siêu máy tính hoạt động của mình, nhưng để kịch bản python của tôi chạy, nó phải được thực thi thông qua tập lệnh shell.

Ví dụ tôi muốn job.shthực thipython_script.py

Làm thế nào điều này có thể được thực hiện?


2
Bạn đã thử chỉ đưa python python_script.pyvào kịch bản shell của bạn?
thkala

Ừm python python_script.py. Hoặc chỉ ./python_script.pykhi kịch bản có một shebang.

2
@delnan: ./python_script.py cũng yêu cầu tập lệnh có thể thực thi được
thkala

chính xác những gì bạn đã cố gắng và vấn đề là gì? Hoặc là bạn đã không làm tốt điều đó của một tìm kiếm google, hoặc có rất nhiều điều mà bạn không nói với chúng tôi ...
thkala

3
Đây là một câu hỏi khá cũ nhưng câu trả lời hay nhất / đầy đủ nhất là câu hỏi của João Víctor. Hãy chắc chắn để đọc xuống nó.
Still.Tony

Câu trả lời:


193

Chỉ cần đảm bảo rằng python thực thi được trong biến môi trường PATH của bạn sau đó thêm vào tập lệnh của bạn

python path/to/the/python_script.py

Chi tiết:

  • Trong tệp job.sh, đặt cái này
#!/bin/sh
python python_script.py
  • Thực hiện lệnh này để làm cho tập lệnh có thể chạy được cho bạn: chmod u+x job.sh
  • Chạy nó: ./job.sh

2
Nó phụ thuộc vào hệ thống của bạn. Python 3 có thể là thời gian chạy python mặc định, hoặc có thể không. Bạn có thể kiểm tra bằng cách chạy python --versionvà bạn có thể thực thi phiên bản với python3 hello.py.
Jean-Bernard Jansen

Phải làm gì nếu không tìm thấy hàng nhập khẩu đã được cài đặt, chẳng hạn như gấu trúc?
mah65

Nó có nghĩa là bạn đã khởi chạy sai nhị phân python hoặc môi trường không đúng. Trong trường hợp đó, bạn nên điền vào virtualenv, sau đó chạy source PATH/TO/VENV/bin/activaterồi gọipython python_script.py
Jean-Bernard Jansen

Tôi đang cố gắng làm điều này trong máy tự động, và tôi đang gặp lỗi; /path/to/Python: can't open file '/path/to/script': [Errno 1] Operation not permittedCó cách nào để đưa mã python của tôi vào trong tập lệnh bash không?
Keyslinger

111

Phương pháp 1 - Tạo tập lệnh shell:

Giả sử bạn có tệp python hello.py Tạo một tệp có tên job.shchứa

#!/bin/bash
python hello.py

đánh dấu nó thực thi bằng cách sử dụng

$ chmod +x job.sh

sau đó chạy nó

$ ./job.sh

Phương pháp 2 (TỐT HƠN) - Làm cho con trăn tự chạy từ vỏ:

Sửa đổi tập lệnh của bạn hello.pyvà thêm tập lệnh này vào dòng đầu tiên

#!/usr/bin/env python

đánh dấu nó thực thi bằng cách sử dụng

$ chmod +x hello.py

sau đó chạy nó

$ ./hello.py

5
Vui lòng chỉnh sửa câu trả lời của bạn để làm cho nó dễ đọc hơn. Bạn có thể sử dụng nút 101010 trong trình chỉnh sửa câu trả lời để đánh dấu nội dung tập lệnh là mã.
thkala

1
Tôi luôn quên #!/usr/bin/env python. Hãy nhớ đảm bảo rằng bạn đang tham khảo đúng phiên bản python + đường dẫn cho hệ thống của mình!
Still.Tony

10

Imho, viết

python /path/to/script.py

Là khá sai, đặc biệt là trong những ngày này. Con trăn nào? trăn2.6? 2.7? 3.0? 3,1? Hầu hết các lần bạn cần chỉ định phiên bản python trong thẻ shebang của tệp python. Tôi khuyến khích sử dụng

#! / usr / bin / env python2 #or python2.6 hoặc python3 hoặc thậm chí python3.1
để tương thích.

Trong trường hợp như vậy, tốt hơn là có tập lệnh thực thi và gọi nó trực tiếp:

#! / bin / bash

/path/to/script.py

Bằng cách này, phiên bản của python bạn cần chỉ được viết trong một tệp. Hầu hết các hệ thống ngày nay đang có python2 và python3 trong thời gian đó, và điều đó xảy ra là python symlink trỏ đến python3 , trong khi hầu hết mọi người mong đợi nó trỏ đến python2 .


1
Bạn có thể truyền tham số tương tự như với python script.py param?
kristian

@kristian có./abc.py -h

7

Lưu chương trình sau dưới dạng print.py:

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

Sau đó, trong loại thiết bị đầu cuối:

chmod +x print.py
./print.py

4

Điều này hoạt động tốt nhất đối với tôi: Thêm phần này ở đầu tập lệnh:

#!c:/Python27/python.exe

(C: \ Python27 \ python.exe là đường dẫn đến python.exe trên máy của tôi) Sau đó chạy tập lệnh qua:

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

Chỉ cần làm rõ, đây là Windows cụ thể. Và lời nhắc mà tôi sử dụng là bash Git. Tôi thấy nó siêu hữu ích. Đặc biệt là trong môi trường Windows
peterb

4

Điều này làm việc cho tôi:

  1. Tạo một công việc tập tin shell mới. Vì vậy, hãy nói: touch job.shvà thêm lệnh để chạy tập lệnh python (thậm chí bạn có thể thêm các đối số dòng lệnh cho python đó, tôi thường xác định trước các đối số dòng lệnh của mình).

    chmod +x job.sh

  2. Bên trong job.shthêm các tệp py sau, giả sử:

    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"

Đầu ra của job.sh sẽ giống như thế này:

Done with python_file.py

Done with python_file1.py

Tôi sử dụng điều này thường khi tôi phải chạy nhiều tệp python với các đối số khác nhau, được xác định trước.

Lưu ý: Chỉ cần nhanh chóng xem xét những gì đang diễn ra ở đây:

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

  • Ở đây, shell script sẽ chạy tệp python_file.py và thêm nhiều đối số dòng lệnh vào thời gian chạy vào tệp python.
  • Điều này không nhất thiết có nghĩa là, bạn cũng phải truyền các đối số dòng lệnh.
  • Bạn chỉ có thể sử dụng nó như : python python_file.py, đơn giản và đơn giản. Tiếp theo, >> sẽ in và lưu trữ đầu ra của tệp .py này trong tệp testpy-output.txt.
  • && là một toán tử logic sẽ chỉ chạy sau khi thực hiện thành công ở trên và vì một tiếng vang tùy chọn "hoàn thành với python_file.py" sẽ được lặp lại cho cli / terminal của bạn trong thời gian chạy.

4

Bạn sẽ có thể gọi nó như python scriptname.pyvd

# !/bin/bash

python /home/user/scriptname.py 

Cũng đảm bảo rằng tập lệnh có quyền chạy.

Bạn có thể làm cho nó thực thi được bằng cách sử dụng chmod u+x scriptname.py.


2

Tôi sử dụng nó và nó hoạt động tốt

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

1

Vì các bài đăng khác nói tất cả mọi thứ (và tôi tình cờ thấy bài đăng này trong khi tìm kiếm sau đây).
Đây là cách để thực thi tập lệnh python từ tập lệnh python khác:

Con trăn 2:

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

Con trăn 3:

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

và bạn có thể cung cấp args bằng cách cung cấp một số khác sys.argv

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.