我有个小问题。我在一台ubuntu 16.04机器上,在一个python脚本中,我想启动一个应该在用户主目录中启动的子进程。我试过了:

subprocess.Popen('echo "Test"', cwd="~", shell=True,universal_newlines=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, executable="/bin/bash")

但当我这样做时,我会得到以下错误:
 proc = subprocess.Popen('echo "test"', cwd="~", shell=True,universal_newlines=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, executable="/bin/bash")
  File "/usr/lib/python3.5/subprocess.py", line 947, in __init__
    restore_signals, start_new_session)
  File "/usr/lib/python3.5/subprocess.py", line 1551, in _execute_child
    raise child_exception_type(errno_num, err_msg)
FileNotFoundError: [Errno 2] No such file or directory: '~'

我不知道我做错了什么,因为当您在cd命令中输入~时,它会将您发送到主目录。我希望有人能找到解决办法
为什么它不能以这种方式工作,以及在主目录中启动它的正确方式是什么。

最佳答案

为了清楚起见,我简化了你的代码。
使用Python3.6或更高版本,您可以执行以下操作:

import subprocess, pathlib
subprocess.Popen(['echo',  'test'], cwd=pathlib.Path.home())

对于Python3.5,您需要将Path.home()包装成str()
import subprocess, pathlib
subprocess.Popen(['echo',  'test'], cwd=str(pathlib.Path.home()))

对于低于3.5的任何Python版本,您都可以使用:
import os, subprocess
subprocess.Popen(['echo',  'test'], cwd=os.path.expanduser('~'))

10-07 12:59