相关疑难解决方法(0)

Python子进程:cmd退出时的回调

我正在推出一个使用的程序 subprocess.Popen(cmd, shell=TRUE)

我对Python很新,但感觉就像应该有一些api让我做类似的事情:

subprocess.Popen(cmd, shell=TRUE,  postexec_fn=function_to_call_on_exit)
Run Code Online (Sandbox Code Playgroud)

我这样做是为了function_to_call_on_exit能够在知道cmd退出的基础上做一些事情(例如保持当前正在运行的外部进程数的计数)

我假设我可以相当简单地将子进程包装在一个将线程与Popen.wait()方法结合起来的类中,但是因为我还没有在Python中进行线程化,而且看起来这可能是一个常见的API存在,我想我会先尝试找一个.

提前致谢 :)

python subprocess callback exit

52
推荐指数
4
解决办法
2万
查看次数

以与Python不同的用户身份运行进程

我正在运行一个userA与root访问一样的脚本,从这个脚本我想popen()打电话并运行一个不同的进程userB.

os.setuid()似乎不适用于此(除非我这样做错了吗?),我想避免基于linux的解决方案,如 su -userB -c <command>

userB在脚本运行时是否有运行进程的pythonic方法userA

python linux popen

11
推荐指数
1
解决办法
3万
查看次数

在python中更改用户

我正在写一个简单的脚本,重启一个hadoop奴隶.在脚本中,我必须以root用户身份进行一些初始更改.之后,我必须更改为用户"hadoop"并执行一组命令.我使用os.system来运行命令,但我怀疑它是否运行良好.例如:

uid=pwd.getpwnam('hadoop')[2]
os.setuid(uid)
os.system('whoami')
os.chdir('/home/hadoop/hadoop/')
os.system('bin/hadoop-daemon.sh stop tasktracker')
Run Code Online (Sandbox Code Playgroud)

在此之后,我必须以root身份执行一些命令,然后再次成为用户"hadoop"并执行:

os.system('bin/hadoop-daemon.sh stop tasktracker')
Run Code Online (Sandbox Code Playgroud)

我这里有三个问题,

  1. os.system是我用来发出linux命令的最佳命令吗?

  2. 我可以通过上面的命令从root用户更改为用户hadoop但我无法更改为root用户(我可以理解,如果他们允许这样做会有安全问题,我想知道有没有可能做到这一点,至少通过密码)?

  3. os.setuid()有用吗?whoami打印用户hadoop,但进程"tasktracker"没有停止使用这些命令,但如果我手动执行相同的命令它工作正常(我手动尝试时使用"su hadoop"而不是setuid).

感谢你的帮助.

  • Sethu

python linux hadoop os.system

5
推荐指数
1
解决办法
2万
查看次数

python 子进程 popen 以不同用户身份执行

python 3.6我正在尝试以不同的用户身份执行命令,popensubprocess它仍然会以调用脚本的用户身份执行(我计划将其称为 root)。我正在使用线程,因此当两个线程并行执行时,不要侵犯用户权限,这一点很重要。

proc = subprocess.Popen(['echo $USER; touch myFile.txt'],
                          shell=True,
                          env={'FOO':'bar', 'USER':'www-data'},
                          stdout=subprocess.PIPE)

Run Code Online (Sandbox Code Playgroud)

上面的例子仍然会用myFile.txt我的user_id 1000

我尝试了不同的方法:

  1. 尝试按照与长时间运行的Python进程不同的用户身份运行子进程中所述,通过复制os.environment并更改用户等
    (注意这是针对python 2)

  2. 按照https://docs.python.org/3.6/library/subprocess.html#popen-constructor中的描述尝试使用start_new_session=True

我的最后一个选择是在命令前加上前缀sudo -u username command,但我认为这不是优雅的方式。

python subprocess python-3.x

3
推荐指数
1
解决办法
6999
查看次数

标签 统计

python ×4

linux ×2

subprocess ×2

callback ×1

exit ×1

hadoop ×1

os.system ×1

popen ×1

python-3.x ×1