Python Script รันคำสั่งใน Terminal


110

ฉันอ่านบางที่แล้ว แต่ดูเหมือนจะหาไม่เจอ ฉันกำลังพยายามค้นหาคำสั่งที่จะดำเนินการคำสั่งในเทอร์มินัลแล้วส่งผลลัพธ์ออกมา

ตัวอย่างเช่นสคริปต์จะเป็น:

command 'ls -l'

มันจะออกผลลัพธ์ของการรันคำสั่งนั้นในเทอร์มินัล

คำตอบ:


201

มีหลายวิธีในการดำเนินการนี้:

วิธีง่ายๆคือใช้โมดูลระบบปฏิบัติการ:

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]

44
ฉันไม่ต้องการโหวตให้คุณ แต่. คุณควรใช้กระบวนการย่อยสำหรับทุกสิ่ง วิธีที่ปลอดภัยกว่า subprocess.call () จะทำให้คุณได้รับอินเทอร์เฟซที่ดีเพื่อแทนที่รูปแบบการโทรธรรมดา
Jorge Vargas

ขอบคุณสำหรับคำตอบที่เพื่อน จะใช้ python สำหรับแอปพลิเคชันแรกของฉันบนเดสก์ท็อป Ubuntu สิ่งนี้จะช่วยฉันได้จริงๆ
LinuxBill

1
ฉันจะรับคำตอบที่สมบูรณ์ได้อย่างไรos.system("nslookup gmail.com")ส่งคืนเฉพาะบรรทัดสุดท้าย0แต่ฉันต้องการรับคำตอบทั้งหมด
Parthapratim Neog

3
@JorgeVargas คุณช่วยฉันเข้าใจได้ไหมว่าทำไมต้องใช้กระบวนการย่อยสำหรับทุกสิ่ง ทำไมถึงปลอดภัยกว่า?
Soutzikevich

39

ฉันชอบใช้โมดูลกระบวนการย่อย:

from subprocess import call
call(["ls", "-l"])

เหตุผลก็คือหากคุณต้องการส่งผ่านตัวแปรบางตัวในสคริปต์สิ่งนี้จะให้วิธีที่ง่ายมากเช่นใช้ส่วนต่อไปนี้ของโค้ด

abc = a.c
call(["vim", abc])

ทำงานได้ดีสำหรับฉันโดยเปิดภาพที่มีพารามิเตอร์พิเศษcall(["eog", "1breeproposal.png", "-f"])
Josh


4

คุณควรดู 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']

2
import os
os.system("echo 'hello world'")

สิ่งนี้ควรใช้งานได้ ฉันไม่ทราบวิธีการพิมพ์ผลลัพธ์ลงใน python Shell



1

ดาวพฤหัสบดี

ในสมุดบันทึก jupyter คุณสามารถใช้ฟังก์ชันมายากล !

!echo "execute a command"
files = !ls -a /data/dir/ #get the output into a variable

ipython

ในการเรียกใช้สิ่งนี้เป็น.pyสคริปต์คุณจะต้องใช้ipython

files = get_ipython().getoutput('ls -a /data/dir/')

เรียกใช้สคริปต์

$ ipython my_script.py

0

คุณสามารถนำเข้าโมดูล 'ระบบปฏิบัติการ' และใช้งานได้ดังนี้:

import os
os.system('#DesiredAction')

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.