2017-08-08 7 views
0

私の最初のPython3スクリプトを既知のシェルスクリプトから作成し、findコマンドとPythonに相当する小さな問題が発生しました。Pythonのshell findコマンドと同等

ディレクトリにpcapファイルがある日があります。ユーザ入力は、開始日+時間終了日+時間と定義します。

これは、シェルスクリプトで使用されるコマンドと出力です。下のcutコマンドは、ファイル名以外のすべてをスクラブします。開始時刻と終了時刻は変数であるため、以下の例では実際の日付+時刻に置き換えています。

find /mnt/pcap/captures/ -type f -newermt "08/08 08:00" ! -newermt "08/08 08:02" | cut -c20-40 

full_cap_1354 

full_cap_1353 

full_cap_1348 

full_cap_1350 

full_cap_1349 

full_cap_1352 

full_cap_1351 

私は、Pythonコマンドを見つけるのOSを実行する方法を見つけたが、私は、コマンドの中に開始と終了変数を渡すように見えることはできません。

subprocess.check_output('find /mnt/pcap/captures/ -type f -newermt "$date1" ! -newermt "$date2" | cut -c20-40 > /home/mydir/loading_dock/load.txt', shell = True) 

ので、変数を渡す方法がある場合、それは大丈夫ですいずれか、または私は、Pythonを学んでいることから、それを行うためのPythonの方法を持ってしたいと思います。

+0

'os' pythonモジュールを見ましたか?たぶんその[ファイルとディレクトリ](https://docs.python.org/2/library/os.html#files-and-directories)のセクションに便利な情報があります – araknoid

答えて

0

文字列だけでなく文字列のリストをサブプロセスに渡す必要があります

+0

そのような例はありますか? – backspin

+0

あなたが見ての通り、subprocess.check_output()に文字列!を渡しています!instedの文字列リストを使用する必要があります。そのリストの各要素は、単一のオプション/コマンドか、空白...例えば、以下を試してみてください:subprocess.check_output(['find'、 '/ mnt/pcap/captures /'、 '-type'、 'f'、 '-newermt'、 '$ date1' '、 '、' -newermt '、' $ date2 ''、 '|'、 'cut'、 '-c20-40'、 '>'、 '' /home/mydir/loading_dock/load.txt ']、シェル= True) –

+0

あなたのコマンドのすべての部分がリストの要素になります。リストの要素が動的にスクリプトに追加された場合、このようにして動的コマンドをシェルに渡すことができます:) –

関連する問題