我正在编写一个使用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) 我正在编写一个 wxPython 应用程序,该应用程序在关闭所有窗口后仍保持打开状态 - 因此您仍然可以将新文件拖放到 OSX 停靠栏图标上(我使用myApp.SetExitOnFrameDelete(False))。
不幸的是,如果我关闭所有窗口,OSX 菜单栏将只包含一个“帮助”菜单。我想至少添加一个文件/打开菜单项,或者只保留主窗口的菜单栏。这在 wxPython 中以某种方式可能吗?
事实上,我也会对非 wxPython hack 感到满意(例如,在 pyobjc 中设置菜单,但在 wxPython 中运行其余的 GUI)。无论如何,OSX 中的 wxPython 开发都是一种黑客攻击;)
更新:我设法使用 Lyndsey Ferguson 的提示解决了这个问题。这是我所做的:
(-10000,-10000)使其不会在屏幕上闪烁(啊,多么肮脏的黑客!)是的,这真的很丑……如果有人提出更漂亮的解决方案,我将不胜感激。
更新2:实际上它可以用更简单的方式解决:如果我们不关闭最后一个窗口,只需隐藏它。并确保它不再响应菜单事件。
我在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)