我试图读取文件名和文件戳,以获取代码中两个命名方案中每一个的最新文件名。我大致有以下代码:
#!/usr/bin/env python
import string, subprocess, sys, os
mypath = "/path/to/file"
my_cmd = (["ls -lt --full-time " + mypath + "*DAI*.txt",
"ls -lt --full-time " + mypath + "*CA*.txt"]
)
getmostrecent_cmd = "head -n 1"
getcols_cmd = "awk '{ print $6, $7, $9 }'"
for cmd in my_cmd:
p1 = subprocess.Popen(cmd.split(), stdout=subprocess.PIPE)
p2 = subprocess.Popen(getmostrecent_cmd.split(), stdin=p1.stdout, stdout=subprocess.PIPE)
p3 = subprocess.Popen(getcols_cmd.split(), stdin=p2.stdout, stdout=subprocess.PIPE)
output = p3.communicate()[0]
print output
会出现以下错误:
^{pr2}$但是:
全局扩展由shell执行。默认情况下,shell不参与通过
Popen()
启动新的子进程。为此,您必须将shell=True
参数传递给它:在shell命令行中,
^{pr2}$awk '{ print $6, $7, $9 }'
中的单引号将字符串{ print $6, $7, $9 }
视为单个参数(以及防止变量扩展)。单引号被shell删除,awk
只看到字符串{ print $6, $7, $9 }
。由于Popen()
默认情况下在执行子进程命令时不涉及shell,并将参数逐字传递给命令,因此不需要单引号:相关问题 更多 >
编程相关推荐