gpt4 book ai didi

python - 如何正确地将破折号参数传递给子进程 Popen

转载 作者:太空宇宙 更新时间:2023-11-04 08:13:33 24 4
gpt4 key购买 nike

subprocess.Popen( ["-c", "kill -SIGUSR2 %s" % master],
stdout=subprocess.PIPE, shell=True).wait()

我得到了

kill: 1: Illegal option -S

指的是-SIGUSR2

要使该参数完全作为 -SIGUSR2 传递,我该怎么做?

附言:

如果我使用 -s SIGUSR2 我会得到 kill: 1: invalid signal number or name: SIGUSR2

PPS:

如果我使用 ["-c", "kill", "-SIGUSR2", master] 我会得到

kill: 1: Usage: kill [-s sigspec | -signum | -sigspec] [pid | job]... or
kill -l [exitstatus]

最佳答案

SIG 是隐含的。

您需要 -USR2:

subprocess.Popen( ["-c", "kill -USR2 %s" % master],
stdout=subprocess.PIPE, shell=True).wait()

GNU coreutils'kill 本身可以给你这个列表。

$ /bin/kill --list|grep USR2
USR2

编辑:我的错误。您的示例使用的是 shell 的 kill 而不是 GNU 的。您没有说是哪个 shell,但根据结果,很可能是 dash 而不是 bashbash 允许您使用 -SIGUSR2-USR2,但 dash 不允许。

$ dash -c 'kill -l' |grep USR
USR1
USR2
$ bash -c 'kill -l' |grep USR
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
$ bash -c 'kill -SIGUSR2 99999'
bash: line 0: kill: (99999) - No such process
$ bash -c 'kill -USR2 99999'
bash: line 0: kill: (99999) - No such process
$ bash -c 'kill -NOTASIGSPEC 99999'
bash: line 0: kill: NOTASIGSPEC: invalid signal specification
$ dash -c 'kill -SIGUSR2 99999'
dash: 1: kill: Illegal option -S
$ dash -c 'kill -USR2 99999'
dash: 1: kill: No such process

关于python - 如何正确地将破折号参数传递给子进程 Popen,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18262706/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com