当我尝试使用python的子进程模块调用nix-shell时,nix-shell似乎只打开了一小会儿,然后又关闭了。似乎没有任何错误信息出现。
示例代码:
nix_shell_cmd = <path to nix-shell binary>
nix_shell_env = <path to shell.nix config file>
nix_call = subprocess.Popen([nix_shell_cmd + ' ' + nix_shell_env],
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE, text=True,
shell=True, start_new_session=True)
output, errors = nix_call.communicate(input='ls -lah')
print(output)
print(errors)
print('end of function')
我可以用调试器看到,一个子进程实际上已经启动了,但在很短的时间后就终止了(< 1s)。我看到的唯一输出是最后一条打印命令的输出。
运行同样的代码,但交换了
nix_shell_cmd + ' ' + nix_shell_env
与
'/usr/bin/zsh'
调用的工作,以及 ls
和预期一样。
在普通终端上通过直接调用 <path to nix-shell binary> <path to shell.nix config file>
,一切工作正常。
我使用python 3.7和nix 2.3.3。
我缺少什么?