Python中Ruby和Perl中的反引号相当于什么?也就是说,在Ruby中我可以这样做:
foo = `cat /tmp/baz`
Run Code Online (Sandbox Code Playgroud)
Python中的等效语句是什么样的?我已经尝试os.system("cat /tmp/baz")但是将结果置于标准输出并返回给我该操作的错误代码.
Joh*_*ica 92
output = os.popen('cat /tmp/baz').read()
Run Code Online (Sandbox Code Playgroud)
sth*_*sth 82
最灵活的方法是使用该subprocess模块:
import subprocess
out = subprocess.run(["cat", "/tmp/baz"], capture_output=True)
print("program output:", out)
Run Code Online (Sandbox Code Playgroud)
如果要通过shell传递调用,例如要capture_output使用扩展文件名,可以使用该check_output()参数.如果你这样做,你必须提供一个字符串引用命令,引用/ ...就像你在shell提示符下输入它一样:
out = subprocess.check_output(["cat", "/tmp/baz"])
Run Code Online (Sandbox Code Playgroud)
bob*_*nce 26
某事是对的.您也可以使用os.popen(),但在可用的情况下(Python 2.4+)子进程通常更可取.
但是,与一些鼓励它的语言不同,产生子进程通常被认为是不好的形式,你可以在语言中做同样的工作.它更慢,更不可靠,并且依赖于平台.你的例子会更好:
foo= open('/tmp/baz').read()
Run Code Online (Sandbox Code Playgroud)
ETA:
baz是一个目录,我正在尝试获取该目录中所有文件的内容
?目录上的猫给我一个错误.
如果你想要一个文件列表:
import os
foo= os.listdir('/tmp/baz')
Run Code Online (Sandbox Code Playgroud)
如果您想要目录中所有文件的内容,例如:
contents= []
for leaf in os.listdir('/tmp/baz'):
path= os.path.join('/tmp/baz', leaf)
if os.path.isfile(path):
contents.append(open(path, 'rb').read())
foo= ''.join(contents)
Run Code Online (Sandbox Code Playgroud)
或者,如果你可以确定那里没有目录,你可以将它放在一个单行中:
path= '/tmp/baz'
foo= ''.join(open(os.path.join(path, child), 'rb').read() for child in os.listdir(path))
Run Code Online (Sandbox Code Playgroud)
jfs*_*jfs 15
foo = subprocess.check_output(["cat", "/tmp/baz"])
Run Code Online (Sandbox Code Playgroud)
从Python 3.5开始,推荐的方法是使用subprocess.run.要获得与您描述的相同的行为,您将使用:
output = subprocess.run("ls", shell=True, stdout=subprocess.PIPE).stdout
Run Code Online (Sandbox Code Playgroud)
这将返回一个bytes对象.你可能想要追加.decode("ascii")或者.decode("utf-8")到最后得到一个str.
最简单的方法是使用命令包.
import commands
commands.getoutput("whoami")
Run Code Online (Sandbox Code Playgroud)
输出:
'bganesan'
| 归档时间: |
|
| 查看次数: |
38031 次 |
| 最近记录: |