相关疑难解决方法(0)

Git Windows禁用密码提示UI但从shell获取密码提示

在git bash for windows中,用户名和/或密码在单独的UI弹出提示中询问,如下所示.

用户名提示

在点击取消时,您将获得以下基于shell的提示,其中可以输入相同的用户名.

基于Shell的用户名提示

有没有办法可以禁用这些提示?我仍然想输入我的用户名和密码,但不是基于UI的提示,我想通过基于shell的提示输入它.

使用此建议无济于事.如何撤消git config --system core.askpass git-gui - askpass

git git-bash

23
推荐指数
1
解决办法
1万
查看次数

从 asyncio 子进程获取实时输出

我正在尝试使用 Python asyncio 子进程来启动交互式 SSH 会话并自动输入密码。实际用例并不重要,但它有助于说明我的问题。这是我的代码:

    proc = await asyncio.create_subprocess_exec(
        'ssh', 'user@127.0.0.1',
        stdout=asyncio.subprocess.PIPE,
        stderr=asyncio.subprocess.STDOUT,
        stdin=asyncio.subprocess.PIPE,
    )

    # This loop could be replaced by async for, I imagine
    while True:
        buf = await proc.stdout.read()
        if not buf:
            break
        print(f'stdout: { buf }')
Run Code Online (Sandbox Code Playgroud)

我希望它能像 asyncio 流一样工作,我可以在其中创建两个任务/子例程/future,一个用于监听StreamReader(在本例中由 给出proc.stdout),另一个用于写入 StreamWriter ( proc.stdin)。

但是,它并没有按预期工作。ssh 命令的前几行输出直接打印到终端,直到出现密码提示(或主机密钥提示,视情况而定)并等待手动输入。我希望能够读取前几行,检查它是否要求输入密码或主机提示,并相应地写入 StreamReader。

它运行该行的唯一一次print(f'stdout: { buf }')是在我按 Enter 键后,当它打印时,显然,“stderr:b'主机密钥验证失败。\r\n'”。

我也尝试了推荐的proc.communicate(),它不像使用 StreamReader/Writer 那么简洁,但它有同样的问题:等待手动输入时执行冻结。

这实际上应该如何运作?如果这不是我想象的那样,为什么不呢?有没有什么方法可以实现这一点,而无需诉诸线程中的某种繁忙循环?

PS:我解释使用 ssh 只是为了清楚起见。我最终使用 plink 来实现我想要的功能,但我想了解如何使用 python 来运行任意命令。

python python-asyncio

8
推荐指数
2
解决办法
5908
查看次数

防止意外的 stdin 读取并锁定子进程

我试图解决所有情况的一个简单案例。我正在运行一个子进程来执行某个任务,我不希望它要求 stdin,但在我什至不希望的极少数情况下,它可能会尝试读取。我想防止它在这种情况下挂起。

这是一个经典的例子:

import subprocess
p = subprocess.Popen(["unzip", "-tqq", "encrypted.zip"])
p.wait()
Run Code Online (Sandbox Code Playgroud)

这将永远挂起。我已经尝试添加

stdin=open(os.devnull)
Run Code Online (Sandbox Code Playgroud)

还有这样的..

如果我找到有价值的解决方案,我会发布。足以让我在父进程中收到异常 - 而不是无休止地进行通信/等待。

更新:似乎问题可能比我最初预期的更复杂,子进程(在密码和其他情况下)从其他文件描述符读取 - 例如 /dev/tty 与外壳交互。可能没有我想的那么容易解决..

python linux shell subprocess pipe

5
推荐指数
1
解决办法
1501
查看次数

标签 统计

python ×2

git ×1

git-bash ×1

linux ×1

pipe ×1

python-asyncio ×1

shell ×1

subprocess ×1