清除Python中的sys.argv

9

当用户在MySQL cli指定密码时,即-pXXXXXX,密码参数将在argv数组中替换为-p******

因此,当有人使用ps检查进程列表时,他们无法看到密码。

我如何在Python中做到这一点? 很明显,以下方法不起作用:

for arg in sys.argv[1:]:
    arg = ""

3
你尝试过 sys.argv = [] 吗?还可以尝试执行 del sys.argv[1](或删除相应索引的参数)来删除一个参数。这样做可能只会删除一个项目。 - martineau
@martineau 更像是覆盖了argv指向的内存。 - daisy
3个回答

6

sys.argv = [sys.argv[0]]

这样做更高效、优雅,比删除除第一个元素外的所有元素更好。然而,我无法确认这将会覆盖或擦除之前在内存中的 sys.argv 值。


@lilydjwg 你使用的是哪个版本的Python?在2.7或3.6中应该都可以正常运行。我在每个版本中进行了测试,都能够正常工作。https://gist.github.com/jtara1/900a580b362ea1c8b3b7019695e04519 - James T.
在top/ps等命令中,这不会改变外部看到的内容。如果你通过参数传递密码,其他使用同一系统的用户将能够看到它(只要他们可以看到你的进程)。 - lilydjwg

0

你可以编写一个包装器,接受密码和其他参数。然后它将生成一个子进程,在不可见命令行的方式下传递密码,例如使用multiprocessing,并自我终止。要在保持其子进程活动的同时终止进程,请参考这里


0

我没有找到方法,所以我转向使用环境变量来获取令牌(并在获取后取消设置,以防泄漏到子进程中)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接