给你准备了一份...
我正在使用 Python 的 ; 从我的 Python 代码中调用 Powershell 脚本subprocess.Popen。有一个 Powershell 脚本需要一个初始输入参数,然后在最后按“Enter”键才能退出。这给我带来了一些麻烦;Powershell 代码有点像这样:
$usrFileName = read-host "Please enter a file name to save the report"
*does some computering*
*creates some output* #ideally looking to capture this to output, but not the main problem
#display task complete to user
Read-Host -Prompt "Press Enter to exit" #This is problematic - don't know how to end this
Python代码:
from tkinter import *
import os, datetime
import subprocess
from subprocess import Popen, PIPE
from keyboard import press_and_release
window = Tk()
window.title( 'PowerShell Script' )
frame = Frame(window)
fldrPath = r"C:/Users/paul.sisson/Downloads/Powershell Development/Monthly PMs PowerShell scans/BLDG-7UP-SUNY-Scans/7UP-LAB-A-325/"
listbox = Listbox(frame)
listbox.configure(width=50)
# Get todays date and add the lab name to be piped later
today = (datetime.datetime.now().strftime('%d%b%Y')).upper()
usrFileName = today + "-7UP-A-325"
for name in os.listdir(fldrPath):
listbox.insert('end', name)
def selection():
fileList = listbox.curselection()
for file in fileList:
keyword = 'Scans'
os.chdir(fldrPath)
proc = subprocess.Popen(["powershell.exe", '-File', fldrPath + '\\' + listbox.get(file)], bufsize=0,
universal_newlines=1, stdout=subprocess.PIPE, stdin=subprocess.PIPE)
我已经使用 成功传递了输入proc.stdin.write(usrFileName),但我担心这不是正确的方法。考虑到我想要读取和写入这一事实,我不想冒使进程陷入僵局的风险,我很确定这种情况正在发生。
使用过subprocess.call一次或两次,但我需要使用 proc.poll 进行输出,所以这是行不通的。
您可以看到我引入keyboard来修复输入,但代码会在到达那里之前挂起,所以不确定这是否是正确的方法。
长话短说- 我正在寻找一些关于正确写入usrFileNamePowershell 的指导,首先,读取 Powershell 的输出,然后在最后执行“按 Enter”。
我应该明确 close stdin,以便子进程停止挂起吗?
我觉得.communicate()或线程是要走的路,但我需要一个优雅的人来给我指路!
感谢您的支持。
PS 更改 Powershell 不是一个选项,不是我的代码,只是尝试使用已经存在的东西。谢谢!
慕尼黑的夜晚无繁华
相关分类