Làm cách nào để chạy lệnh dòng lệnh trong tập lệnh Python?


16

Tôi đang sử dụng 2 tập lệnh riêng biệt Scale1.pyScale2.py. Để chạy chúng, tôi nhập sudo python Scale1.pyhoặc sudo python Scale2.pytừ dòng lệnh terminal. Tôi muốn có một dòng trong Scale2.pykịch bản, trong đó nếu tôi nhấn một nút, vỡ chương trình và chạy Scale1.py. Một cái gì đó như thế này, mà không hoạt động.

if GPIO.input(23) == False:
    break(sudo python Scale1.py)

Câu trả lời:


24

os.system("sudo python scale1.py")

đầu tiên bạn sẽ cần nhập mô-đun os

import os

Tôi không có pi với tôi để kiểm tra, nhưng điều này xuất phát từ câu trả lời thứ hai cho câu hỏi này: /programming/89228/calling-an-external-command-in-python


Đây là những gì tôi đã cố gắng và nó đã làm việc, cảm ơn rất nhiều Harry! Nhưng tôi đã phải kết hợp cả hai chương trình đầu tiên. Bây giờ os.system ("sudo python Scale3.py") chỉ cần khởi động lại vào đầu chương trình Scale3.py, điều này là tốt. Tôi nghĩ rằng nhập Scale3.py cũng sẽ hoạt động. Tôi đã không thử quy trình con, nó có vẻ thú vị và có lẽ là thứ tôi cần học.
Rico

os.system()đã được sử dụng để ủng hộ subprocess, xem stackoverflow.com/a/4256153/4212158
crypdick

11

Nói chung, sử dụng mô-đun quy trình con

subprocess.call(["sudo","python","scale1.py"]) 

cho các cuộc gọi dòng lệnh.

Một ví dụ xử lý kết quả của một cuộc gọi quy trình con;

 result = subprocess.check_output(['sudo','service','mpd','restart'])

Quá trình con thay thế một số mô-đun và chức năng cũ hơn, như os.systemos.spawn . Nó làm một công việc tốt trong việc vệ sinh các đối số, vì vậy nó bảo vệ bạn khỏi việc tiêm vỏ .

https://docs.python.org/2/l Library / sub process.html

Tất nhiên để chạy tập lệnh python thứ hai, không cần cuộc gọi CLI, bạn có thể nhập chúng.


Tôi đang cố gắng học cách phát hành các lệnh từ trong tập lệnh Python (xem tại đâyđây ) và gặp một số vấn đề. Tôi tự hỏi nếu subprocesscó thể tốt hơn trong trường hợp của tôi là tốt.
uhoh

6

Bạn có thể sử dụng sudo như harry sib đề xuất, nhưng bạn sẽ phải thêm người dùng đang chạy tập lệnh đầu tiên vào tệp sudoers .

Cách tốt nhất để chạy tập lệnh python từ tập lệnh python khác là nhập tập lệnh. Bạn nên có logic của tập lệnh của mình trong một phương thức trong tập lệnh thứ hai:

# Scale2.py
def chạy ():
    Làm đầu tiên()
    do_second ()
    [...]

# Chỉ chạy nếu được gọi từ dòng lệnh
if __name__ == '__main__':
    chạy()
# Scale1.py
nhập quy mô2

if (GPIO.input (23) == Sai):
    Tỷ lệ2.run ()

2
+1, vì python có khả năng này, nó sẽ là cleanestcâu trả lời.
LuWi

1
+1, đây là cách chính xác để làm những gì OP muốn và có lẽ nên là câu trả lời được chấp nhận.
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.