|
|
发表于 2023-4-29 09:15:41
From FishC Mobile
|
显示全部楼层
从您的说明来看,您希望以用户1004的身份执行可执行文件并返回结果。我推测您将在符合 POSIX 标准的系统上运行这个程序。
在您的程序中,我发现了如下的问题,让我们来一一确认。
首先,您似乎尝试打印一个 Popen 对象作为其表示的进程的运行结果,这是不恰当的。您应该访问 result2 的 returncode 属性来获取其运行的返回值,或者从 result2 的 stdout 和 stderr 类文件对象中读取输出信息。请注意这可能需要首先使用 wait 或类似方法等待进程结束。
其次,使用字符串作为命令行向 Popen 传递的方式不值得推荐,因为在拼接中可能出现转义等问题。您可以试试使用参数序列传递要执行的程序和参数,如传递一个列表,其中第一个元素是要执行的程序名,之后各个元素依次为各个参数。
最后,Popen 提供了可选参数 user 来以另外的用户身份运行子进程,可以更方便的进行用户切换且不影响当前进程。您可以试试用这一参数替代 os.setuid。
请注意,切换用户操作可能需要对应的能力或以根用户身份运行程序。另外,由于问题也可能出现在要执行的程序中,由于不知道其具体内容,我无法就此给出建议。
希望这些建议对您有帮助。如果仍有问题欢迎继续向我提问。 |
|