[英]using subprocess.run to automate a command line application (windows 10)
嘗試使用 python 自動使用名為 slsk-cli 的命令行應用程序
手動,該過程很簡單——我打開一個命令提示符窗口並輸入“soulseek login”,然后提示要求用戶名,在我輸入並按回車后,我要求輸入密碼。
到目前為止,我設法得到了用戶名的提示,但沒有通過。
subprocess.run('soulseek login',shell=True)
這會導致 python 控制台中的 ?Login 輸出,但當我在調試或運行中運行時,進程也會卡住
有沒有更好的方法來解決這個問題?
通過subprocess
與系統持續交互可能很棘手。 但是,您的界面提示似乎一個接一個,因此可以通過充當 Return 鍵擊的換行符鏈接在一起。
例如,下面顯示的程序只是提示用戶輸入他們的用戶名和密碼,“用戶”(您的腳本)通過proc.communicate()
方法提供輸入。 提供這些信息后,系統會詢問用戶是否願意繼續(並再次做同樣的事情)。 以下subprocess
調用將以下輸入提供給prompter.py
腳本:
import subprocess
uid = 'Bob'
pwd = 'MyPa$$w0rd'
reply = 'n'
with subprocess.Popen('./prompter.py',
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
stdin=subprocess.PIPE,
text=True) as proc:
stdout, stderr = proc.communicate(input='\n'.join([uid, pwd, reply]))
# Check output.
>>> print(stdout)
Please enter a username: Password: uid='Bob'
pwd='MyPa$$w0rd'
Have another go? [y|n]:
# Sanity check for errors.
>>> print(stderr)
''
為了完整起見,我在下面包含了prompter.py
腳本的內容。
#!/usr/bin/env python
from time import sleep
def prompter():
while True:
uid = input('\nPlease enter a username: ')
pwd = input('Password: ')
print(f'{uid=}\n{pwd=}')
sleep(2)
x = input('Have another go? [y|n]: ')
if x.lower() == 'n':
break
if __name__ == '__main__':
prompter()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.