2016-07-23 74 views
1

我有一個二進制foo需要兩個命令行參數:用戶名和密碼。Python打印重定向作爲標準輸入命令行參數

我寫了script.py來生成用戶名和密碼。目前,我使用的打印給他們打印到標準輸出,然後手動複製並粘貼在外殼當我調用foo的外殼,即

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

但是,我需要生成未在打印的特殊字節標準輸出,因此如果我從標準輸出複製並粘貼,這些特殊的字節值不見了。我如何重定向我的python輸出作爲foo的參數?

順便說一句:我已經嘗試過在子進程中使用調用來直接調用python中的foo,這並不理想,因爲如果我在foo中觸發seg錯誤,它不會反映在bash中。

+0

@ John1024,這是行不通的,因爲foo檢查是否有兩個參數。它報告錯誤是因爲沒有足夠的參數。謝謝你的提示,但我並不擔心密碼監聽。這只是一個要求如何提供兩個參數的例子。 – 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收到的名稱作爲其第一個參數和密碼作爲其第二個參數。

安全說明: OP聲明,這與他的應用程序無關,但對於其他可能會在其他應用程序中閱讀此內容的人,請注意,在命令行上傳遞密碼並不安全:命令行對系統中的所有用戶都是可用的。

+0

你說得對。我忘了我在我的python腳本中添加了一個額外的調試打印。我評論它,它現在起作用。 – drdot

1

因此subprocess工作,但你沒有使用,因爲你沒有得到'foo'(二進制)的輸出?

您可以使用communicate()函數將二進制輸出返回。

+0

「調用」未在stdout中產生分段錯誤。它確實生成了一個核心轉儲文件,但是我希望在標準輸出中看到seg錯誤信息。如果我通過在shell中直接調用foo來提供參數,它將在shell中擁有seg fault信息。你可以把正確的代碼用於溝通嗎?謝謝, – drdot

相關問題