我想编写一个函数来执行shell命令并将其输出作为字符串返回,无论是错误还是成功消息.我只想获得与命令行相同的结果.
什么是代码示例会做这样的事情?
例如:
def run_command(cmd):
# ??????
print run_command('mysqladmin create test -uroot -pmysqladmin12')
# Should output something like:
# mysqladmin: CREATE DATABASE failed; error: 'Can't create database 'test'; database exists'
Run Code Online (Sandbox Code Playgroud) 我想将我运行的命令的输出分配给os.system变量,并防止它输出到屏幕.但是,在下面的代码中,输出被发送到屏幕并且打印的var值为0,我猜这表示命令是否成功运行.有没有办法将命令输出分配给变量并阻止它显示在屏幕上?
var = os.system("cat /etc/services")
print var #Prints 0
Run Code Online (Sandbox Code Playgroud) 我需要存储我在变量中执行的shell命令的结果.但我无法做到这一点.我尝试过:
import os
call = os.system("cat syscall_list.txt | grep f89e7000 | awk '{print $2}'")
print call
Run Code Online (Sandbox Code Playgroud)
但它在终端中打印结果并将调用值打印为零,可能表示成功.如何将结果存储在变量中?
Perl和PHP用反引号做到这一点.例如,
$output = `ls`;
Run Code Online (Sandbox Code Playgroud)
返回目录列表.类似的函数system("foo")返回给定命令foo的操作系统返回码.我在谈论一个将foo打印返回到stdout的变体.
其他语言如何做到这一点?这个函数有一个规范名称吗?(我要用"反击";但也许我可以用"syslurp"硬币.)
我想是的接口相匹配的好方法subprocess.check_call-即,它抛出CalledProcessError的时候失败了,是同步的,&C -的,而是返回命令的返回码(如果它甚至不认为)返回程序的输出,要么只是stdout,要么是(stdout,stderr)的元组.
有人有这样做的方法吗?
可能重复:
Python中的反引号等价物
当我想直接写入Perl中的命令提示符时,我可以这样做:
Perl文件test.pl:
$directory = `dir`;
print $directory;
Run Code Online (Sandbox Code Playgroud)
哪个会输出像..
C:\ Documents and Settings\joslim\Desktop> perl test.pl
驱动器C中的卷没有标签.卷序列号为EC37-EB31
C:\ Documents and Settings\joslim\Desktop目录
(以及所有文件的列表..)
我可以用Python做到这一点吗?我四处搜寻但没有运气.
另外,你能告诉我这叫什么吗?我确信有一个比"直接写入命令提示符"更具技术性的术语......
可能重复:
Python中的反引号等价物
我正在寻找在Python中运行终端命令(ls -l)的最佳方法.我已经阅读了有关子流程的内容,但我完全不了解它,如果有人可以尝试让我了解正在发生的事情,我将不胜感激.我需要使用ls -l命令检索一个硬链接号,即!= 1,然后保存此号码以匹配其他地方的目录号码.现在我想知道如何获取硬链接号并使用子进程将其保存到变量(如果有的话,可以使用更好的方法).
这是我到目前为止使用的代码:#!/ usr/bin/python
#tool that resolves time machine directories
import os
#create output file
os.chdir("/home/sean/Desktop")
hard_link_number = open('hardLinkNumber.log', 'w')
#move into mounted backup (figure out how to remove xe2 etc)
os.chdir("/mnt/Backups.backupdb/stuart dent\xe2\x80\x99s MacBook Pro/2010-08-10-160859/MAc")
#find hard link data
print>>hard_link_number, os.system("ls -la")
hard_link_number.close()
Run Code Online (Sandbox Code Playgroud)
os.system("ls -la")输出我需要的信息,但不会将其保存到我创建的文件中.我在别处读到os.system不会输出数据.