# Trả về một chuỗi bắt đầu bằng một dấu cách theo sau là một dấu ngoặc kép
# phiên bản của đối số.
# Hai chiến lược. đặt trong dấu ngoặc đơn nếu nó không chứa dấu ngoặc kép;
# nếu không, hãy đặt trong dấu ngoặc kép và tiền tố ký tự có thể trích dẫn
# với dấu gạch chéo ngược.
Sử dụng Python để thực thi các lệnh Shell trong Linux
Mã trạng thái và đầu ra
Lấy mã trạng thái và đầu ra
1 2 3 4 5 6 7 8 9
>>> import commands
>>> commands.getstatusoutput['echo foo']
[0, 'foo']
>>> status, output = commands.getstatusoutput['echo foo']
>>> print[status]
0
>>> print[output]
foo
Chỉ đầu ra lệnh
Chỉ nhận được đầu ra Shell
1 2 3
>>> import commands
>>> commands.getoutput['echo foo']
'foo'
Tập lệnh cơ bản
Tệp kiểm tra với một dòng dữ liệu
1 2
$ cat file.txt
test-string
Tập lệnh python rất cơ bản của chúng tôi
1 2 3 4 5 6 7
import commands
status = None
output = None
status, output = commands.getstatusoutput['cat file.txt']
print["Status: {}, Output: {}".format[status, output]]
Chạy kịch bản
1 2
$ python script.py
Status: 0, Output: test-string
Có 3 chức năng trong mô-đun lệnh để làm việc với các lệnh bên ngoài. Các chức năng nhận biết trình bao và trả về đầu ra hoặc mã trạng thái từ lệnh
getstatusoutput[]
Hàm getstatusoutput[] chạy một lệnh thông qua trình bao và trả về mã thoát và đầu ra văn bản [kết hợp thiết bị xuất chuẩn và thiết bị xuất chuẩn]. Các mã thoát giống như đối với hàm C wait[] hoặc os. đợi đã[]. Mã này là một số 16 bit. Byte thấp chứa số tín hiệu đã giết quá trình. Khi tín hiệu bằng 0, byte cao là trạng thái thoát của chương trình. Nếu một tệp lõi được tạo, bit cao của byte thấp được đặt
>>> import commands
>>> commands.getstatusoutput['echo foo']
[0, 'foo']
>>> status, output = commands.getstatusoutput['echo foo']
>>> print[status]
0
>>> print[output]
foo
0Ví dụ này chạy hai lệnh thoát bình thường, lệnh thứ ba dùng để tạo kết xuất lõi và lệnh thứ tư tạo khối đang chờ bị hủy từ trình bao khác. [Đừng chỉ sử dụng Ctrl-C vì trình thông dịch sẽ chặn tín hiệu đó. Sử dụng ps và grep trong một cửa sổ khác để tìm quá trình đã đọc và gửi tín hiệu cho nó bằng lệnh kill. ]
>>> import commands
>>> commands.getstatusoutput['echo foo']
[0, 'foo']
>>> status, output = commands.getstatusoutput['echo foo']
>>> print[status]
0
>>> print[output]
foo
1Trong ví dụ này, tôi đã sử dụng kill -HUP $PID để hủy quá trình đọc từ một cửa sổ trình bao riêng biệt, vì vậy tín hiệu được báo cáo là 1
đầu ra[]
Nếu mã thoát không hữu ích cho ứng dụng của bạn, bạn có thể sử dụng getoutput[] để chỉ nhận đầu ra văn bản từ lệnh
>>> import commands
>>> commands.getstatusoutput['echo foo']
[0, 'foo']
>>> status, output = commands.getstatusoutput['echo foo']
>>> print[status]
0
>>> print[output]
foo
2>>> import commands
>>> commands.getstatusoutput['echo foo']
[0, 'foo']
>>> status, output = commands.getstatusoutput['echo foo']
>>> print[status]
0
>>> print[output]
foo
3getstatus[]
Trái ngược với những gì bạn có thể mong đợi, getstatus[] không chạy lệnh và trả về mã trạng thái. Thay vào đó, đối số của nó là một tên tệp được kết hợp với “ls -ld” để tạo một lệnh được chạy bởi getoutput[]. Đầu ra văn bản của lệnh được trả về
>>> import commands
>>> commands.getstatusoutput['echo foo']
[0, 'foo']
>>> status, output = commands.getstatusoutput['echo foo']
>>> print[status]
0
>>> print[output]
foo
4Như bạn nhận thấy từ đầu ra, ký tự $ trong đối số của lệnh gọi cuối cùng được thoát để tên biến môi trường không được mở rộng