终端中的Python脚本执行命令


109

我在某个地方读过这篇文章,但似乎找不到。我试图找到一个将在终端中执行命令然后输出结果的命令。

例如:脚本将是:

command 'ls -l'

它将在终端中运行该命令的结果

Answers:


197

做这件事有很多种方法:

一种简单的方法是使用os模块:

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]

43
我不想对你投反对票。您应该对所有内容使用子流程。更安全。subprocess.call()将为您提供一个漂亮的界面,以替换简单的调用表单。
豪尔赫·巴尔加斯

感谢您的回答伴侣。在Ubuntu桌面上的第一个应用程序将使用python,这将对我有很大帮助。
LinuxBill

1
我如何获得命令的完整响应,os.system("nslookup gmail.com")仅返回最后一行0,但我想获得完整响应。
Parthapratim Neog 2015年

3
@JorgeVargas你能帮我理解为什么子过程应该用于所有东西吗?为什么更安全?
Soutzikevich

38

我更喜欢使用子流程模块:

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

原因是,如果您想在脚本中传递一些变量,这将提供非常简单的方法,例如,采用以下代码部分

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

对我来说,打开带有附加参数的图片效果很好call(["eog", "1breeproposal.png", "-f"])
乔什


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

您可以导入“ os”模块并像这样使用它:

import os
os.system('#DesiredAction')

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.