【问题标题】:Running Python script from Python shell从 Python shell 运行 Python 脚本
【发布时间】:2015-02-04 08:38:23
【问题描述】:

在驻留在远程桌面的批处理文件中,我只写了“python jwRelay.py”

我想使用 psexec 使用以下命令运行批处理文件:

psexec -s -i 2 \\135.20.230.160 -u administrator -p force cmd.exe /c "C:\Users\Administrator\Desktop\jwRelayCDV16\SampleCode\Python\relay.bat"

问题是当我运行上述命令时,远程机器中的命令提示符快速弹出并关闭(我可以通过 mstsc 看到)。如果我想远程调试代码,如何保持命令提示符打开?

在我的笔记本电脑上运行上述命令后,我得到了这个:

PsExec v2.11 - 远程执行进程
版权所有 (C) 2001-2014 Mark Russinovich
Sysinternals - www.sysinternals.com

cmd.exe 在 135.24.237.167 上退出,错误代码为 2。

除了在远程机器上以交互模式运行脚本 jwRelay.py 之外,还有其他选择吗?

【问题讨论】:

  • 如果您希望 cmd shell 保持打开状态,请使用“/k”而不是“/c”,例如psexec -s -i 2 \\135.20.230.160 cmd.exe /k python path\to\jwRelay.py。如果您还希望 Python 在交互式 shell 中保持打开状态,请使用 python -i path\to\jwRelay.py。此外,考虑到“-s”使其以SYSTEM 运行,“-u”选项将被忽略。
  • 感谢 eryksun,我使用了 /k 并且有效。在另一个线程中,我问为什么我必须将 -i 1 更改为 -i 2 因为 psexec 突然停止使用 -i 1 选项。但是在论坛里没有得到任何答复。如果你能解释它会很有帮助。
  • 为了处理并发用户,Windows 子系统 (win32k.sys) 的内核组件被映射到会话地址空间,以及命名内核对象的命名空间(例如 ALPC 端口、WindowStation、Event、Mutant、 Section) 部分本地化到\Sessions 对象目录(检查accesschk -qso \Sessions)。在 Vista (NT 6) 之前,控制台与系统服务共享会话 0,但 NT 6 将会话 0 与系统服务隔离开来。 “-i”选项应该默认为控制台会话。尝试psexec \\135.20.230.160 -s cmd.exe 打开一个 shell 来检查可用的会话。
  • 谢谢 eryksun,我会检查的

标签: python windows python-2.7 python-3.x psexec


【解决方案1】:

Python 2

execfile("./filename") 

Python 3

exec(open("./filename").read())

可能还有几种方法可以执行代码和特定命令,使用 Python 2 commands 或更好的 subprocess 替换它。我的头顶上有 [commands|subprocess].getoutputsubprocess.Popensubprocess.call 等。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-01
    • 2015-10-15
    • 2012-04-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-27
    • 1970-01-01
    相关资源
    最近更新 更多