2010-09-16 214 views
45

我前段时间在某处读过这篇文章,但似乎找不到它。我试图找到一个将在终端执行命令然后输出结果的命令。Python脚本在终端执行命令

例如:该脚本将是:

command 'ls -l' 

它将出运行在终端

回答

89

有几种方法可以做到这一点:

一个简单的方法是使用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] 
+16

我不想让你失望,但。你应该使用子进程处理所有事情。这样更安全。 subprocess.call()会给你一个很好的界面,以取代简单的调用形式。 – 2011-03-24 20:35:43

+0

感谢您的答复队友。将在Ubuntu桌面上使用python作为我的第一个应用程序,这对我真的很有帮助。 – LinuxBill 2013-01-16 10:55:10

+0

如何获得命令的完整响应,'os.system(“nslookup gmail.com”)'只返回最后一行'0',但我想获得完整的响应。 – 2015-11-29 10:06:02

1

您应该还考虑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'] 
-5

在桌面GUI,(有些你可能不使用它),你可以leafpad桌面快捷方式,它有它的命令来打开deignated文件。如果你复制并粘贴到你的Python解释器中,它应该可以工作。 (我不能确定这会工作,但为什么不试试!) 对不起,所有的拼写错误...我只有11. 这个信息是不是组成!这只是我在制作一个名字时很懒惰!请记住,我只有11岁!

+0

lol whattttttttt – mikebertiean 2017-09-07 16:37:13

+0

lmfao这是什么 – Gianlucca 2017-12-08 19:43:40

8

我更喜欢子模块的用法:

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

原因是,如果你想传递一些变量在脚本这给了非常简单的方法,例如采用代码

abc = a.c 
call(["vim", abc]) 
下面的部分
0
import os 
os.system("echo 'hello world'") 

这应该工作。我不知道如何将输出打印到python Shell中。