我目前正试图在审核后写一个小包装来自动发布,但是当涉及到Dim results As String = sOut.ReadToEnd()
并且我可以时,这个功能失败了;为了这个原因,
编辑:它不会产生错误,它似乎只是进入ReadToEnd()永远不会返回
我只是错过了一些明显的东西吗?
Function postReview() As String
Dim psi As ProcessStartInfo = New System.Diagnostics.ProcessStartInfo("cmd.exe")
psi.UseShellExecute = False
psi.RedirectStandardOutput = True
psi.RedirectStandardInput = True
psi.RedirectStandardError = True
Dim proc As Process = System.Diagnostics.Process.Start(psi)
Dim strm As StreamReader = proc.StandardError
Dim sOut As StreamReader = proc.StandardOutput
Dim sIn As StreamWriter = proc.StandardInput
MsgBox()
sIn.WriteLine("cd " & IO.Directory.GetCurrentDirectory)
sIn.WriteLine(Me.ToString)
sIn.WriteLine("post-review.py -d --username=User --password=Pass")
Dim results As String = sOut.ReadToEnd()
sIn.WriteLine("exit")
sIn.Close()
sOut.Close()
Return results
End Function
进一步信息:实际的命令正在运行,因为我可以看到它发布到评论委员会。但它似乎在等待Stream完成时陷入循环。
我尝试使用Read和Readline而没有运气
答案 0 :(得分:1)
我认为可能是这一行造成了麻烦:
psi.UseShellExecute = True
要使用StandardOutput,您必须设置 ProcessStartInfo.UseShellExecute 为假,你必须设置 ProcessStartInfo.RedirectStandardOutput 真的
答案 1 :(得分:1)
交换:
Dim results As String = sOut.ReadToEnd()
sIn.WriteLine("exit")
sIn.Close()
sOut.Close()
与
sIn.WriteLine("exit")
Dim results As String = sOut.ReadToEnd()
psi.WaitForExit()
我猜测输出流没有“结束”,因为你还没有退出。但是,退出后输出仍然可用 而且你不需要关闭流,但你可能要等到进程退出(最后一行代码)
答案 2 :(得分:0)
尝试使用Read或ReadLine。