コードに見られるように、2つの命名体系の最新のファイルのファイル名とファイルスタンプを読み込もうとしています。私は大体、次のコードを持っている:PythonのサブプロセスでAwkが無効な表現 "'"エラーが発生する
ls: cannot access /path/to/file/*DAI*.txt: No such file or directory
awk: '{
awk:^invalid char ''' in expression
ls: cannot access /path/to/file/*CA*.txt: No such file or directory
awk: '{
awk:^invalid char ''' in expression
:しかし私は、次のエラー(複数可)を得
#!/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
- 私は "LS -ltを使用することができますが - フルタイム/path/to/file/*DAI*.txt "と入力し、結果を端末に表示します。同じパスで問題が発生するのはなぜですか?
- awkコマンドは、サブプロセスを直接実行すると正常に動作します。例えば。 subprocess.Popen(["awk"、....]、stdin = ....、stdout = ....)は正常に機能しました。しかし、今では一重引用符で問題が発生しています。私は文字列を3重引用符で囲み、一重引用符をエスケープしようとしました。
おかげでチームメイト。 2にあなたのasnwerは多くの助けになりました。 1の場合、私はshell = Trueを使うべきではありませんでした。私の回避策は、DAIとCAのフルパスを使い、grepを実行することでした。 – DDauS