ฉันอ่านบางที่แล้ว แต่ดูเหมือนจะหาไม่เจอ ฉันกำลังพยายามค้นหาคำสั่งที่จะดำเนินการคำสั่งในเทอร์มินัลแล้วส่งผลลัพธ์ออกมา
ตัวอย่างเช่นสคริปต์จะเป็น:
command 'ls -l'
มันจะออกผลลัพธ์ของการรันคำสั่งนั้นในเทอร์มินัล
ฉันอ่านบางที่แล้ว แต่ดูเหมือนจะหาไม่เจอ ฉันกำลังพยายามค้นหาคำสั่งที่จะดำเนินการคำสั่งในเทอร์มินัลแล้วส่งผลลัพธ์ออกมา
ตัวอย่างเช่นสคริปต์จะเป็น:
command 'ls -l'
มันจะออกผลลัพธ์ของการรันคำสั่งนั้นในเทอร์มินัล
คำตอบ:
มีหลายวิธีในการดำเนินการนี้:
วิธีง่ายๆคือใช้โมดูลระบบปฏิบัติการ:
import os
os.system("ls -l")
สิ่งที่ซับซ้อนมากขึ้นสามารถทำได้ด้วยโมดูลกระบวนการย่อยตัวอย่างเช่น:
import subprocess
test = subprocess.Popen(["ping","-W","2","-c", "1", "192.168.1.70"], stdout=subprocess.PIPE)
output = test.communicate()[0]
os.system("nslookup gmail.com")
ส่งคืนเฉพาะบรรทัดสุดท้าย0
แต่ฉันต้องการรับคำตอบทั้งหมด
ฉันชอบใช้โมดูลกระบวนการย่อย:
from subprocess import call
call(["ls", "-l"])
เหตุผลก็คือหากคุณต้องการส่งผ่านตัวแปรบางตัวในสคริปต์สิ่งนี้จะให้วิธีที่ง่ายมากเช่นใช้ส่วนต่อไปนี้ของโค้ด
abc = a.c
call(["vim", abc])
call(["eog", "1breeproposal.png", "-f"])
ในความเป็นจริงคำถามใด ๆ เกี่ยวกับกระบวนการย่อยจะเป็นการอ่านที่ดี
คุณควรดู commands.getstatusoutput
สิ่งนี้ส่งคืนทูเพิลของความยาว 2 .. อันแรกคือจำนวนเต็มส่งคืน (0 - เมื่อคำสั่งสำเร็จ) วินาทีคือผลลัพธ์ทั้งหมดตามที่จะแสดงในเทอร์มินัล
สำหรับ ls
import commands
s=commands.getstatusoutput('ls')
print s
>> (0, 'file_1\nfile_2\nfile_3')
s[1].split("\n")
>> ['file_1', 'file_2', 'file_3']
import os
os.system("echo 'hello world'")
สิ่งนี้ควรใช้งานได้ ฉันไม่ทราบวิธีการพิมพ์ผลลัพธ์ลงใน python Shell
os.popen ()สวยเพียงเพื่อใช้งาน แต่ได้รับการคัดค้านตั้งแต่ Python 2.6 คุณควรใช้โมดูลกระบวนการย่อยแทน
อ่านที่นี่: การอ่าน os.popen (คำสั่ง) เป็นสตริง
ในสมุดบันทึก jupyter คุณสามารถใช้ฟังก์ชันมายากล !
!echo "execute a command"
files = !ls -a /data/dir/ #get the output into a variable
ในการเรียกใช้สิ่งนี้เป็น.py
สคริปต์คุณจะต้องใช้ipython
files = get_ipython().getoutput('ls -a /data/dir/')
เรียกใช้สคริปต์
$ ipython my_script.py
คุณสามารถนำเข้าโมดูล 'ระบบปฏิบัติการ' และใช้งานได้ดังนี้:
import os
os.system('#DesiredAction')
สำหรับ python3 ใช้กระบวนการย่อย
import subprocess
s = subprocess.getstatusoutput(f'ps -ef | grep python3')
print(s)