【问题标题】:Python subprocess doesn't execute if the path contains home directory tilde ~如果路径包含主目录波浪号,则 Python 子进程不会执行 ~
【发布时间】:2015-11-23 18:32:06
【问题描述】:

我正在尝试从 django 应用程序检测错误并重新启动服务器。 我正在使用以下代码:

try:
 # do something
except:
 print('here')
 subprocess.call(['/home/my_username/restart.sh'])

restart.sh如下

#!/bin/sh
/home/my_username/webapps/app/apache2/bin/restart
/home/my_username/webapps/my_db/bin/cron

我正在使用 webfaction 作为托管服务提供商。 以上代码打印语句,但不重启服务器,也不启动my_db下的mysql数据库。

也许我需要提供用户名/密码?该怎么做?

【问题讨论】:

    标签: django python-2.7


    【解决方案1】:

    subprocess.call 不会将 ~ 波浪号字符扩展到您的主目录,因此它会在您当前的工作目录中查找名为 ~ 的文件夹,然后从那里查找适合您的应用

    您可以使用os.path.expanduser 函数来获得所需的行为,它会是这样的:

    try:
     # do something
    except:
     print('here')
     subprocess.call([os.path.expanduser('~/webapps/app/apache2/bin/restart')])
    

    此脚本将查找/home/user/webapps/app/apache2/bin/restart 并执行它。

    祝你好运;)

    【讨论】:

      猜你喜欢
      • 2011-08-10
      • 2019-10-03
      • 2010-11-03
      • 1970-01-01
      • 2012-03-08
      相关资源
      最近更新 更多