当我使用 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 层,却没有意识到这一点。 ;)
每当我 运行 这个程序时,它完美地完成了第一个功能,然后在做任何其他事情之前结束程序。我怎样才能让其他两个功能 运行?
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 层,却没有意识到这一点。 ;)