11

私の現在の作業ディレクトリには、ディレクトリ ROOT/ があり、その中にいくつかのファイルがあります。

私は実行できることを知っcp -r ROOT/* /dstており、問題はありません。

しかし、Python コンソールを開いて次のように書いた場合:

import subprocess
subprocess.call(['cp', '-r', 'ROOT/*', '/dst'])

うまくいきません!

このエラーがあります:cp: cannot stat ROOT/*: No such file or directory

手伝って頂けますか?

4

4 に答える 4

10

似たようなことをしようとしているときに、これに出くわしました。

*はファイル名に展開されません

その通り。のマニュアルページを見るとcp、任意の数のソース引数を使用して呼び出すことができ、スイッチを使用して引数の順序を簡単に変更できます-t

import glob
import subprocess
subprocess.call(['cp', '-rt', '/dst'] + glob.glob('ROOT/*'))
于 2011-02-18T11:10:52.430 に答える
7

試す

subprocess.call('cp -r ROOT/* /dst', shell=True)

ここでは、配列ではなく単一の文字列を使用していることに注意してください。

または、 listdircopyを使用して独自の実装を構築します

于 2009-09-08T09:16:02.917 に答える
4

*ファイル名に展開されません。これはシェルの機能です。ここでは、* という名前のファイルを実際にコピーします。subprocess.call()パラメータとともに使用しますshell=True

于 2009-09-08T08:49:23.570 に答える
0

文字列 + リストではなく、リストとしてコマンドを指定します。

次の 2 つのコマンドは同じです:-

First Command:-
test=subprocess.Popen(['rm','aa','bb'])

Second command:-
list1=['rm','aa','bb']
test=subprocess.Popen(list1)

したがって、複数のファイルをコピーするには、blob を使用してファイルのリストを取得し、リストの前に「cp」を追加し、リストの最後に宛先を追加して、そのリストを subprocess.Popen() に提供する必要があります。

お気に入り:-

list1=blob.blob("*.py")
list1=['cp']+list1+['/home/rahul']
xx=subprocess.Popen(list1)

それは仕事をします。

于 2011-11-07T13:00:58.763 に答える