我尝试运行此命令:
subprocess.call('''psql --username=openerp --dbname=sf_template_20150605121222 --no-password --command="select table_schema, table_name, count_rows(table_schema, table_name) from information_schema.tables where table_schema not in ('pg_catalog', 'information_schema') and table_type='BASE TABLE' order by 1, 2 desc" > ~/sf_template.old.txt''', shell=True)
在shell中得到这样的错误:
/bin/sh: 1: cannot create ~/sf_template.old.txt: Directory nonexistent
我做错了吗?为什么我不能将文件解析为我当前的用户家?用户是常规用户(即我当前登录的用户),其具有主目录。
答案 0 :(得分:1)
错误消息显示~
未在您的案例中展开。它表明你已经通过了错误的环境:
>>> from subprocess import call
>>> call('echo >~/nonexistent/dir', shell=True)
/bin/sh: 1: cannot create /home/me/nonexistent/dir: Directory nonexistent
2
>>> call('echo >~/nonexistent/dir', shell=True, env={})
/bin/sh: 1: cannot create ~/nonexistent/dir: Directory nonexistent
2
>>> call('echo >~/nonexistent/dir', shell=True, env=dict(HOME='abc'))
/bin/sh: 1: cannot create abc/nonexistent/dir: Directory nonexistent
2
注意:代字号在第一种情况和最后一种情况下都会扩展。
您应该使用env=dict(os.environ, YOUR_VAR='1')
代替env=dict(YOUR_VAR='1')
。
POSIX defines Tilde expansion as:
如果登录名为null(即,tilde-prefix仅包含 代字号),代字号前缀由变量的值代替 家。如果未设置HOME,则结果未指定。