สำหรับ Python 2.7+ คำตอบที่ใช้คือ subprocess.check_output()
คุณควรจดบันทึกการจัดการอาร์กิวเมนต์เมื่อเรียกใช้กระบวนการย่อยเนื่องจากอาจทำให้สับสนเล็กน้อย ....
หาก args เป็นเพียงคำสั่งเดียวโดยไม่มี args ของตัวเอง (หรือคุณได้shell=True
ตั้งค่า) มันอาจเป็นสตริง มิฉะนั้นจะต้องเป็นรายการ
ตัวอย่างเช่น ... เพื่อเรียกใช้ls
คำสั่งนี่เป็นเรื่องปกติ:
from subprocess import check_call
check_call('ls')
ดังนั้นนี่คือ:
from subprocess import check_call
check_call(['ls',])
อย่างไรก็ตามหากคุณต้องการส่ง args ไปยังคำสั่ง shell คุณไม่สามารถทำได้:
from subprocess import check_call
check_call('ls -al')
คุณจะต้องส่งเป็นรายการแทน:
from subprocess import check_call
check_call(['ls', '-al'])
shlex.split()
ฟังก์ชั่นบางครั้งอาจจะมีประโยชน์ในการแยกสตริงเป็นเปลือกเช่นไวยากรณ์ก่อนที่จะสร้างกระบวนการย่อยแล้ว ... เช่นนี้
from subprocess import check_call
import shlex
check_call(shlex.split('ls -al'))
"ntpq -p"
ซึ่งเป็นส่วนที่แตกต่างกันของ ปัญหามากกว่าที่คุณถาม