如何用python的子进程模块调用nix-shell?

问题描述 投票:0回答:1

当我尝试使用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。

我缺少什么?

python shell subprocess nix
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.