如何用subprocess.Popen执行带有很多入参的python脚本,并得到它的PID?且将这个python进程作为子进程挂载到PID为5678的进程上
时间: 2024-03-11 18:51:42 浏览: 64
可以使用下面的代码来执行带有很多入参的python脚本,并得到它的PID,同时将这个python进程作为子进程挂载到PID为5678的进程上:
```python
import subprocess
# python脚本路径和入参
script_path = "/path/to/script.py"
args = ["arg1", "arg2", "arg3"]
# 执行python脚本,获取进程PID
process = subprocess.Popen(["python", script_path] + args)
pid = process.pid
# 将python进程挂载到PID为5678的进程上
subprocess.Popen(["sudo", "mount", "--bind", "/proc/{}/ns/mnt".format(pid), "/proc/5678/ns/mnt"])
```
其中,`subprocess.Popen` 方法可以在新的进程中执行指定的命令,返回一个 `Popen` 对象,可以通过 `pid` 属性获取进程的PID。`mount` 命令可以将一个文件系统挂载到另一个目录下,这里将 python 进程的命名空间挂载到 PID 为 5678 的进程的命名空间下,实现子进程挂载的操作。
相关问题
如何用subprocess.Popen执行带有很多参数的python脚本,并得到它的PID
可以使用 `subprocess.Popen` 来执行带有很多参数的 Python 脚本,并得到它的 PID。下面是一个例子:
```python
import subprocess
# 定义命令行参数
args = ["python", "script.py", "--arg1", "value1", "--arg2", "value2"]
# 执行脚本
process = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
# 获取进程 ID
pid = process.pid
# 打印进程 ID
print("PID:", pid)
# 获取输出
output, error = process.communicate()
# 打印输出和错误
print(output.decode())
print(error.decode())
```
上述代码中,`args` 变量定义了要执行的命令和参数。在这个例子中,我们要执行 `script.py` 脚本,并传入两个命令行参数 `--arg1` 和 `--arg2`,它们分别对应的值是 `value1` 和 `value2`。
然后,我们使用 `subprocess.Popen` 来执行这个命令。`stdout=subprocess.PIPE` 和 `stderr=subprocess.PIPE` 参数表示要把标准输出和标准错误输出都保存下来,以便后面使用。
接着,我们使用 `process.pid` 属性来获取进程的 PID,并将其保存在变量 `pid` 中。
最后,我们打印进程的 PID,获取脚本的输出和错误信息,并通过 `decode()` 方法将字节字符串转换为文本字符串。最后,我们打印输出和错误信息。
如何用subprocess.Popen执行带有很多入参的python脚本,并得到它的PID?其中入参为/opt/hikvision/web/components/tomcat85linux64.1/ /opt/hikvision/web/components/xconfig.1/bin/xconfig-server/config /opt/hikvision/web/components/sac.1/bin/web /opt/hikvision/web/components/activemq514linux64.1/bin/linux-x86-64 /opt/hikvision/web/components/rabbitmq.1/bin/rabbitmq-auth/config /opt/hikvision/web/components/ls.1/script/license /opt/hikvision/web/components/xresmgr.1/bin/xresmgr-rms/config /opt/hikvision/web/components/loganalysis.1/bin/loges /opt/hikvision/web/components/xjob.1/bin/xjob-server/config /opt/hikvision/web/components/xdictionary.1/bin/xdictionary-dds/config
可以使用 `subprocess.Popen` 来执行带有很多入参的 Python 脚本,并得到它的 PID。下面是一个例子:
```python
import subprocess
# 定义命令行参数
args = ["python", "script.py", "/opt/hikvision/web/components/tomcat85linux64.1/", "/opt/hikvision/web/components/xconfig.1/bin/xconfig-server/config", "/opt/hikvision/web/components/sac.1/bin/web", "/opt/hikvision/web/components/activemq514linux64.1/bin/linux-x86-64", "/opt/hikvision/web/components/rabbitmq.1/bin/rabbitmq-auth/config", "/opt/hikvision/web/components/ls.1/script/license", "/opt/hikvision/web/components/xresmgr.1/bin/xresmgr-rms/config", "/opt/hikvision/web/components/loganalysis.1/bin/loges", "/opt/hikvision/web/components/xjob.1/bin/xjob-server/config", "/opt/hikvision/web/components/xdictionary.1/bin/xdictionary-dds/config"]
# 执行脚本
process = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
# 获取进程 ID
pid = process.pid
# 打印进程 ID
print("PID:", pid)
# 获取输出
output, error = process.communicate()
# 打印输出和错误
print(output.decode())
print(error.decode())
```
上述代码中,`args` 变量定义了要执行的命令和参数。在这个例子中,我们要执行 `script.py` 脚本,并传入多个命令行参数,每个参数都是一个路径。
然后,我们使用 `subprocess.Popen` 来执行这个命令。`stdout=subprocess.PIPE` 和 `stderr=subprocess.PIPE` 参数表示要把标准输出和标准错误输出都保存下来,以便后面使用。
接着,我们使用 `process.pid` 属性来获取进程的 PID,并将其保存在变量 `pid` 中。
最后,我们打印进程的 PID,获取脚本的输出和错误信息,并通过 `decode()` 方法将字节字符串转换为文本字符串。最后,我们打印输出和错误信息。
阅读全文