2016-04-12 2 views
0

私はLinux上のテキストファイルで作成した単語のリストを取得し、ステガノグラフィー抽出プログラムに対して単語をチェックするプログラムを通して実行する簡単なスクリプトを作成しようとしています。私ができましたPythonでは、リストからlinuxコマンドにどのようにデータを入力しますか?

steghide --extract -p {ここでパスワード} -sf {ここにファイル名}:

プログラム(steghide)

は、コマンドで次の構文を使用していますファイルを呼び出してリスト内の単語のforループを設定しますが、その繰り返しから各コマンドに単語を入力する方法は見つかりません。

ここで私はそれをどうしようとしています。

import os 
import sys 

script, filename = argv 
filename2 = sys.open(filename) 

for word in filename2: 
    os.system('steghide --extract -p [want to put something here] -sf stegfilename') 

私は制御された箱に入っており、既に持っているものを超えるものをダウンロードすることはできません。どんな助けもありがとうございます。

更新:

私はそれを動作させました。しかし、今、正しい答えが見つかると、それを終了させるようにしています。私はちょうどPythonに出力を読むのに苦労しています。ここに私がこれまで持っているものがあります。

FとしてオープンとSYSインポートARGV

スクリプト、ファイル名= ARGV 通過=ファイル名

(通過)から `インポートサブプロセス :Fの行のための : PROC = subprocess.popen(stdout = proc.communicate()[0]このファイルを編集するには、次のように入力します。[stghout = 出力= proc.stdout.readline()

if 'wrote' in output: 
     print 'YOU FOUND IT!' 
     break 
    else: 
     print line` 

答えて

1

これはPythonでstring formating optionsを学ぶ良い時間です。文字列に値を動的に挿入できます。例:この特定のケースで

"This {0} is an example".format([1,2,3]) 
>>>> "This [1,2,3] is an example" 

、あなたが

value = 'foo' # the item you want to insert - replace with list, number, etc. 
... 
for word in filename2: 
    os.system('steghide --extract -p {0} -sf stegfilename'.format(value)) 

をしたいこれはあなたの文字列に値を挿入し、その文字列にsteghideを呼び出します。

1

代わりにsubprocessモジュールを使用してください。より多くのオプション/コントロールが提供され、os.system()は推奨されていません。

from subprocess import check_call 


for word in map(str.rstrip, filename2):  
    check_call(['steghide', "--extract", "-p", word, "-sf", "stegfilename'"]) 
+0

私はうまくいきましたが、正しいパスワードが見つかったらすぐに終了しようとしています。ここに私がこれまで持っているものがあります。SYSインポートARGVからインポートサブプロセス スクリプト、ファイル名= ARGV 通過=ファイル名Fとして(通過)オープンと : \t \t PROC = subprocess.popen([ 'steghide'、 'Fの行のための \t --extract」、 '' line.strip()、 '-sf'、 'steggedファイル名'] -p、STDOUT = subprocess.PIPE) \t \t STDOUT = proc.communicate()[0] \t \t出力= proc.stdout.readline() \t \t \t出力に「書いた」場合: \t \t \t印刷 'YOU FOUND IT!' \t \t \tブレーク他 \t \t: \t \t \t印刷ライン – Brad

+0

@Brad 'steghide'は、C/Unixの慣習に従っており、成功すれば0を返し、1の場合ではありません。成功すると 'subprocess.call'とともに' break'を使ってください( 'subprocess.call'はプロセスの戻りコードを返します)。 'subprocess.PIPE'、' proc.communicate()[0] 'などは必要ありません。 – jDo

1

使用subprocess.check_call

import os 
import sys 

script, filename = argv 
filename2 = sys.open(filename) 

for word in filename2: 
    os.system('steghide --extract -p ' +[want to put something here]+ '-sf stegfilename') 
0

文字列フォーマットはここに従うものとします。引数のリストを渡し

import subproces 
with open(filename, "r") as f: 
    # assumes that you have one word per line 
    for line in f: 
     subprocess.call(['steghide', '--extract', '-p', line.strip(), '-sf', stegfilename]) 
     # or if you want the output of running Niels Provos' cool, old tool :) 
     cmd_output = subprocess.check_output(['steghide', '--extract', '-p', line.strip(), '-sf', stegfilename]) 
関連する問題