小编gyi*_*yim的帖子

如何通过子进程模块调用ssh,以便它使用SSH_ASKPASS变量

我正在编写一个使用SSH命令的GUI.我尝试使用子进程模块来调用ssh并设置SSH_ASKPASS环境变量,以便我的应用程序可以弹出一个窗口,询问SSH密码.但是我无法使用给定的SSH_ASKPASS命令使ssh读取密码:它总是在终端窗口中提示它,无论我如何设置DISPLAY,SSH_ASKPASS,TERM环境变量或如何管道标准输入/输出.如何确保ssh与当前TTY分离并使用给定程序读取密码?

我的测试代码是:

#!/usr/bin/env python

import os
import subprocess

env = dict(os.environ)
env['DISPLAY'] = ':9999' # Fake value (trying in OS X and Windows)
del env['TERM']
env['SSH_ASKPASS'] = '/opt/local/libexec/git-core/git-gui--askpass'

p = subprocess.Popen(['ssh', '-T', '-v', 'user@myhost.com'],
    stdin=subprocess.PIPE,
    stdout=subprocess.PIPE,
    stderr=subprocess.PIPE,
    env=env
)
p.communicate()
Run Code Online (Sandbox Code Playgroud)

python ssh subprocess

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

如何在没有任何打开窗口的情况下更改 wxPython 中的 OSX 菜单栏?

我正在编写一个 wxPython 应用程序,该应用程序在关闭所有窗口后仍保持打开状态 - 因此您仍然可以将新文件拖放到 OSX 停靠栏图标上(我使用myApp.SetExitOnFrameDelete(False))。

不幸的是,如果我关闭所有窗口,OSX 菜单栏将只包含一个“帮助”菜单。我想至少添加一个文件/打开菜单项,或者只保留主窗口的菜单栏。这在 wxPython 中以某种方式可能吗?

事实上,我也会对非 wxPython hack 感到满意(例如,在 pyobjc 中设置菜单,但在 wxPython 中运行其余的 GUI)。无论如何,OSX 中的 wxPython 开发都是一种黑客攻击;)

更新:我设法使用 Lyndsey Ferguson 的提示解决了这个问题。这是我所做的:

  • 在启动时,我创建了一个窗口,并立即显示和隐藏。我将它的位置设置为(-10000,-10000)使其不会在屏幕上闪烁(啊,多么肮脏的黑客!)
  • 我在该窗口中创建了一个空的 EVT_CLOSE 事件处理程序,使其无法关闭。
  • 似乎销毁窗口会重置 OSX 菜单,但隐藏不会......所以当最后一个窗口关闭时,我需要再次显示和隐藏此窗口(隐藏是必要的,以便用户无法使用窗口菜单或 Cmd-`)

是的,这真的很丑……如果有人提出更漂亮的解决方案,我将不胜感激。

更新2:实际上它可以用更简单的方式解决:如果我们不关闭最后一个窗口,只需隐藏它。并确保它不再响应菜单事件。

python macos pyobjc wxpython

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

如何在D回溯中显示行号?

我在D中有以下示例代码:

import std.stdio;

int g(int i) {
    auto l = [1, 2, 3, 4];
    return l[i];
}

void f(int i) {
    writeln(g(i));
}

void main(string[] args) {
    f(1);
    f(10);
    f(2);
}
Run Code Online (Sandbox Code Playgroud)

我用DMD编译了这段代码(在OS X上使用v2.056).当我运行它时,它显然崩溃了:

 core.exception.RangeError@test(5): Range violation
 ----------------
 5   test    0x000b823a _d_array_bounds + 30
 6   test    0x000aa44b D4test7__arrayZ + 27
 7   test    0x000aa4ae int test.g(int) + 94
 8   test    0x000aa4c7 void test.f(int) + 11
 9   test    0x000aa422 _Dmain + 26
 10  test    0x000b87b3 extern (C) int rt.dmain2.main(int, char**).void runMain() + 23 …
Run Code Online (Sandbox Code Playgroud)

d backtrace

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

标签 统计

python ×2

backtrace ×1

d ×1

macos ×1

pyobjc ×1

ssh ×1

subprocess ×1

wxpython ×1