2016-08-15 12 views
0

正常に動作します:Pythonスクリプト - 端子を介して印刷されたコマンドは、私はこのコードを使用してPythonでアーカイブを作成してい

#Creates archive using string like [proxy_16-08-15_08.57.07.tar] 
proxyArchiveLabel = 'proxy_%s' % EXECUTION_START_TIME + '.tar' 
log.info('Packaging %s ...' % proxyArchiveLabel) 

#Removes .tar from label during creation 
shutil.make_archive(proxyArchiveLabel.rsplit('.',1)[0], 'tar', verbose=True) 

は、これはローカルディレクトリでアーカイブ罰金を作成します。問題は、サイズの問題とこのタスクの必要性のために、削除したいアーカイブに特定のディレクトリがあることです。

ExecWithLogging('tar -vf %s --delete ./roles/jobs/*' % proxyArchiveLabel) 
# ------------ 
def ExecWithLogging(cmd): 
    print cmd 
    p = subprocess.Popen(cmd.split(' '), env=os.environ, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) 
    while(True): 
     log.info(p.stdout.readline().strip()) 
     if(p.poll() is not None): 
     break 

しかし、これは基本的に何もしないようです。サイズは変わりません。 ExecWithLoggingの中にcmdを印刷し、そのコマンドをスクリプトの作業ディレクトリにある端末にコピーすると正常に動作します。確かに、私はまた、tar -vf %s --deleteコマンドの一部としてアーカイブが作成された場所への完全なパスをハードコーディングしてみましたが、何も起こっていないようでした。

は、私は私のINFOログにこの出力得るか:tar: Pattern matching characters used in file namesをので、私は一種の... Popenが誤って何とか私のコマンドを解釈していると思っています(というか、私は可能性が高い間違って何かに渡しています)。

何か間違っていますか?それ以外に何ができますか?

答えて

2

tarコマンドで--wildcardsオプションを使用する必要がある場合があります。これにより、パターンマッチングが有効になります。これは、あなたがあなたのログで見ているものかもしれません。

編集: 質問に答えるにはどうすればよいですか?私は、シェルがワイルドカード拡張を実行していると考えていますが、Popenを通して提供されているコマンドはそうではありません。 tarの--wildcardオプションは、tarにワイルドカード展開を強制します。
詳細については、
Tar and wildcards

+0

こちらをご覧ください。なぜターミナルが気にしなかったのか興味があるスーパーになるだろうが、 'ポペン' – MrDuk

関連する問題