簡體   English   中英

使用 subprocess.run 自動化命令行應用程序(Windows 10)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM