当我使用 subprocess.call() 切换用户时,如何保持我的程序 运行?

How can I keep my program running when I use subprocess.call() to switch user?

每当我 运行 这个程序时,它完美地完成了第一个功能,然后在做任何其他事情之前结束程序。我怎样才能让其他两个功能 运行?

import subprocess

subprocess.call(["su", "my_user"])  # runs perfectly
print("user switched to my_user")  # does not run
subprocess.call(["cd", "../documents/my_code"])  # does not run

顺便说一句,我正在使用 ipython 从 Linux 终端 运行 宁此。

这不是你想的那样。当你 运行 su 时,正如函数所说,这个 运行s 作为一个子进程。该子进程将以 my_user 启动并立即退出,但您的 Python 进程不受影响。你还是原来的用户。

您可以将命令输入该子流程,假设您需要像其他用户一样运行,但您的流程不会改变。

跟进

subprocess.call 等待命令完成。 su 命令将创建一个新的 shell,作为新用户登录,shell 将向您显示一个新提示。您可能认为您的 Python 脚本已经结束并且您回到了原始提示,但事实并非如此。您看到的提示来自 su,您是新用户。如果您按 Ctrl-D,那么 su 将退出,您的脚本将继续,您将看到您的脚本类型“用户切换到 my_user”。因此,您被嵌套了好几 shell 层,却没有意识到这一点。 ;)