m0_68884057 2024-09-26 11:38 采纳率: 0%
浏览 6

WIN32API CreateProcess 调用外部程序执行命令

用CreateProcess函数打开python解释器,lpCommandLine参数传入"powershell.exe python", 管道读取子进程的输出,应该返回:
"Python 3.12.6 (tags/v3.12.6:a4a2d2b, Sep 6 2024, 20:11:23) [MSC v.1940 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.

"
但实际上是什么信息的没有,并且后续的向管道写命令,子进程好像也没有执行这个命令。

如果输入lpCommandLine参数传入"powershell.exe python -i",就能正常运行。想问一下,是什么原因?

  • 写回答

1条回答 默认 最新

  • 一轮明月照丘壑 2024-09-28 21:55
    关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    使用 CreateProcess 函数来启动外部程序并执行命令时,lpCommandLine 参数是非常重要的。这个参数应该包含要执行的完整命令字符串。在您的情况中,您试图使用 powershell.exe 来执行 python 命令,并且在尝试通过管道与这个子进程交互时遇到了问题。

    问题可能在于 lpCommandLine 参数的设置方式。当您传入 "powershell.exe python" 时,这意味着您正在尝试让 PowerShell 执行名为 python 的命令,而不是在 PowerShell 中运行 Python 脚本或命令。因此,当您尝试向该进程写入更多命令时,这些命令可能没有被正确解释或执行。

    相比之下,当您使用 "powershell.exe python -i" 时,您实际上是在告诉 PowerShell 在交互模式下运行 Python,这意味着您可以继续向该进程写入命令并看到输出。

    为了解决这个问题,您可以尝试以下方法之一:

    1. 使用正确的命令行参数启动 Python 解释器。例如,您可以尝试使用 "powershell.exe -Command 'python -c "your python command here"'" 来执行特定的 Python 命令。这样,您可以直接在命令行中执行 Python 代码,而无需进入交互模式。
    2. 如果您确实需要进入 Python 的交互模式,并希望与 Python 子进程进行交互(例如读取输出并发送更多命令),您可能需要使用更复杂的方法来处理管道和输入/输出流。这通常涉及到创建管道、设置标准输入/输出流以及正确地处理进程的输入和输出。

    请注意,使用 CreateProcess 函数来启动外部程序并与之交互是一个相对复杂的任务,需要正确处理各种细节以确保程序的正常运行。此外,由于您正在与 PowerShell 和 Python 交互,可能还需要考虑命令行参数和环境的兼容性问题。

    评论

报告相同问题?

问题事件

  • 创建了问题 9月26日