[英]How can I automate rpmbuild with signing in python?
通常,您可以通過管道輸入stdin來自動完成交互式提示的答案:
import subprocess as sp
cmd = 'rpmbuild --sign --buildroot {}/BUILDROOT -bb {}'.format(TMPDIR, specfile)
p = sp.Popen(cmd, stdout=sp.PIPE, stderr=sp.PIPE, stdin=sp.PIPE, universal_newline=True, shell=True)
for out in p.communicate(input='my gpg passphrase\n'):
print(out)
無論出於什么原因,這都不適合我。 我嘗試過寫入p.stdin
,在執行p.communicate()
之前,嘗試過刷新緩沖區,嘗試過使用不p.communicate()
universal_newlines=True
字節,對內容進行了硬編碼等。在所有情況下,該命令已執行並掛起:
Enter pass phrase:
我的第一個直覺是stdin
不是正確的文件描述符,並且rpmbuild
在內部調用了gpg
命令,也許我的輸入沒有通過管道傳遞。 但是當我執行p.stdin.close()
我收到有關嘗試寫入已關閉描述符的subprocess
OSerror
。
rpmbuild命令對stdin
做了什么阻止我對其進行寫入?
我能做些駭客嗎? 我嘗試echo "my passphrase" | rpmbuild ....
echo "my passphrase" | rpmbuild ....
作為命令,但是不起作用。
我知道我可以使用gpg
來執行某些操作,例如命令和簽名包而無需輸入密碼,但是我有點想避免這種情況。
編輯:
經過一番閱讀之后,我意識到這是需要輸入密碼的命令的常見問題,通常使用getpass
形式。
我看到一個解決方案是使用像pexpect
這樣的庫,但是我想要標准庫中的東西。 我將繼續尋找,但是我想也許我可以嘗試寫類似/dev/tty
東西。
rpm使用getpass(3)重新打開/ dev / tty。
有2種自動化方法:1)創建一個偽指令2)(linux)在/ proc中找到重新打開的文件描述符
如果編寫腳本,則Expect(1)包含一個(或具有一個)簡短示例,其中包含可以使用的偽腳本。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.