2016-07-23 15 views
1

ユーザ名とパスワードの2つのコマンドライン引数を必要とするバイナリfooがあります。stdinコマンドライン引数としてのPythonプリントリダイレクト

ユーザー名とパスワードを生成するscript.pyを作成しました。現在、私はstdoutにそれらを印刷するプリントを使用していますし、手動でコピーして、私はシェルでのfooを呼び出すとき、シェルに貼り付け、すなわち、

$python script.py 
username password 
(i copied and paste the output below) 
$./foo username password 

はしかし、私は印刷可能なされていない特殊なバイトを生成する必要がありますstdoutからコピーしてstdoutから貼り付けると、これらの特殊なバイト値はなくなります。どうすれば私のpython出力をfooの引数としてリダイレクトできますか?

BTW:サブプロセスでcallを使って直接pythonでfooを呼び出そうとしましたが、これは理想的ではありません。なぜなら私がfooのsegフォルトをトリガするとbashに反映されないからです。

+0

@ John1024は、fooが2つの引数があるかどうかを調べるために機能しません。十分な引数がないため、エラーが報告されました。ヒントありがとうございますが、私はパスワードスヌーピングについて心配していません。これは、2つの引数を入力する方法を尋ねる単なる例です。 – drdot

答えて

2

ラン:

./foo $(python script.py) 

には、この作品と二つの引数でfooを提供し、のはこのscript.pyを使用してみましょうことを示しています

$ cat script.py 
#!/usr/bin/python 
print("name1 pass1") 

そして、私たちは何を見ることができるようにのはこのfooを使用してみましょう引数が提供されました:

$ cat foo 
#!/bin/sh 
echo "1=$1 2=$2" 

ここにあります実行結果は:あなたが見ることができるように

$ ./foo $(python script.py) 
1=name1 2=pass1 

は、fooは、その第一引数と第2引数としてパスワードとして名前を受け取りました。

セキュリティノート: OPはこれが自分のアプリケーションとは関係ありませんが、他のアプリケーションでこれを読んでいる人は、コマンドラインでパスワードを渡すことは安全ではないことに注意してください。コマンドラインは、システム上のすべてのユーザーが簡単に利用できます。

+0

あなたは正しいです。私は私のpythonスクリプトで追加のデバッグプリントを追加するのを忘れてしまった。私はそれをコメントし、それは今動作します。 – drdot

1

だからsubprocessが働いていましたが、あなたは 'foo'(バイナリ)からの出力を得られなかったのであなたは使用しませんでしたか?

関数を使用して、バイナリの出力を得ることができます。

+0

"call"はstdoutにセグメンテーション違反を生成しませんでした。コアダンプファイルを生成しますが、stdoutにsegフォルト情報が表示されます。シェルでfooを直接呼び出すだけで引数を与えるだけでは、シェルにsegフォルト情報があります。あなたは通信を使用するための適切なコードを置くことができますか?ありがとう、 – drdot

関連する問題