2016-09-28 5 views
0

次のpythonスクリプトを使用して、Windowsマシン間でファイルをコピーしています。関数内の正規表現の使い方は?

from subprocess import call 

def copy_logs(): 
    file= '.\pscp.exe -pw test123 C:\Users\Administrator\Desktop\interact.* [email protected]:/' 
    call(file) 

copy_logs() 

私は上記のスクリプトを実行すると、私は次のエラーを取得しています:

PS C:\Users\Administrator\Desktop> python .\execute_pscp.py 
C:\Users\Administrator\Desktop\interact.*: No such file or directory 

PS C:\Users\Administrator\Desktop> 

しかし、私は、まさに「ファイル=」としてファイル名を指定した場合、\ pscp.exe -pw test123 C:\ Users \ Administrator \ Desktop \ interact_python.py [email protected]:/ '"、以下のように完全に動作します。

PS C:\Users\Administrator\Desktop> python .\execute_pscp.py 
interact_python.py  | 0 kB | 0.2 kB/s | ETA: 00:00:00 | 100% 
PS C:\Users\Administrator\Desktop> 

しかし、私はコマンド "interact。*"の中でいくつかの正規表現を使用したいと思います。特定のファイル/ファイルをコピーできるようにします。

また、このスクリプトを3時間ごとに実行します。これを実現するためのPythonの方法はありますか?

+1

「pscp.exe」に引数を渡すだけです。 'pscp.exe'はその種の入力をサポートしなければなりません。 – zvone

+0

'call(file、shell = True)'。シェルが全く起動していないときに、シェル機能を使用しようとしています(シェルはアスタリスクを展開する責任があり、起動されたアプリケーションではありません)。 –

+0

Windowsシェルでは、アスタリスクは展開されません。 –

答えて

0

以下に示すように、 "import os"モジュールを試しました。その完璧に動作します。

import os 

def copy_logs(): 
    os.system(".\pscp.exe -pw test123 C:\Users\Administrator\Desktop\interact_pyth* [email protected]:/") 

copy_logs() 
+0

'Subprocess.call'を試しましたか?私はそれも動作すると賭ける。 –

+0

@ Jean-FrançoisFabre "subprocess.call(file)"を使用すると、 "NameError:グローバル名 'サブプロセス'が定義されていません"というエラーがスローされます。 – rcubefather

+0

'import subprocess'が最初に呼び出されます。また、バックスラッシュはエスケープされているほうが良い(またはプリフィックスがプリフィックスで接頭辞されているか、いくつかの驚きがあるかもしれません)。 –