在两个不同的python进程之间进行进程间通信的干净而优雅的方法是什么?我目前在操作系统中使用命名管道,但感觉有点hacky.我用dbus服务重写了我的东西,但是看起来当通过SSH会话远程运行代码时,它现在尝试初始化X11,这对于我想要做的事情来说似乎完全没有必要(它们与GUI无关).所以也许dbus有点太重量了.我正准备再次使用套接字重新设计,但它看起来很低级,所以我认为可能有一个更高级别的模块我可以导入和使用,我根本就不知道它的名字,我想我应该问SO第一..
我的要求是能够运行python foo.py并让这个过程就像守护进程那样做,并能够发送消息给它python foo.py --bar.后一个调用应该只是向现有进程发送一个消息并终止,可能带有0成功的返回代码或其他失败的代码(因此需要进行一些双向通信).
我正在编写一个需要执行管理任务的pyqt应用程序.我更喜欢用提升权限启动我的脚本.我知道在SO或其他论坛中多次询问此问题.但人们建议的解决方案是从Python脚本中查看这个SO问题 请求UAC提升?
但是,我无法执行链接中给出的示例代码.我已将此代码放在主文件的顶部并尝试执行它.
import os
import sys
import win32com.shell.shell as shell
ASADMIN = 'asadmin'
if sys.argv[-1] != ASADMIN:
script = os.path.abspath(sys.argv[0])
params = ' '.join([script] + sys.argv[1:] + [ASADMIN])
shell.ShellExecuteEx(lpVerb='runas', lpFile=sys.executable, lpParameters=params)
sys.exit(0)
print "I am root now."
Run Code Online (Sandbox Code Playgroud)
它实际上要求提升权限,但打印行永远不会被执行.有人可以帮我成功运行上面的代码.提前致谢.
是否有可能以编程方式在Vista中以编辑方式运行已编译的Python(通过py2exe编译)?
更一点澄清:
我编写了一个程序来修改Vista中的Windows主机文件(c:\ Windows\system32\drivers\etc\hosts)程序将无法运行,除非你右键单击并运行为即使用户具有管理员权限,管理员也是如此,如果用户具有管理权限,它将在XP中运行,因此我需要一种方法以编程方式将其提升为正确的权限.
我目前正在使用shutil.copy2()复制大量图像文件和文件夹(0.5到5演出之间的任何地方). Shutil工作正常,但它太慢了.我想知道是否有办法将此信息传递给Windows以制作副本并给我标准的传输对话框.你知道,这家伙......

很多时候,我的脚本将占用标准Windows副本所花费的时间的两倍,这让我感到紧张,因为我的python解释器在运行副本时会挂起.我多次运行复制过程,我希望减少时间.
在python中,我想执行cmd命令:
os.system("netsh interface set interface \"Local Area Connection\" disable")
Run Code Online (Sandbox Code Playgroud)
断开互联网网络。但是,使用我的帐户,它报告接口名称未注册路由器。我认为,我需要以管理员身份执行 os.system 。但我不知道如何以管理员身份使用它!那么,你能帮我吗!感谢。
我正在尝试对上传REST API的文件进行单元测试.我在网上找到了一些使用Pillow生成图像的代码,但它无法序列化.
这是我生成图像的代码:
image = Image.new('RGBA', size=(50, 50), color=(155, 0, 0))
file = BytesIO(image.tobytes())
file.name = 'test.png'
file.seek(0)
Run Code Online (Sandbox Code Playgroud)
然后我尝试上传这个图片fille:
return self.client.post("/api/images/", data=json.dumps({
"image": file,
"item": 1
}), content_type="application/json", format='multipart')
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
<ContentFile: Raw content> is not JSON serializable
Run Code Online (Sandbox Code Playgroud)
如何变换枕头图像以使其可序列化?
我在python中编写代码,我需要通过软件名称获取互联网流量.我需要使用cmd命令netstat -nb,该命令需要提升.我必须保持简单,一行左右,没有长批量或PowerShell脚本.如果我只使用子进程python库,那更好.
我有两行代码可以满足我的需求:
subprocess.check_output('powershell Start-Process netstat -ArgumentList "-nb" -Verb "runAs"', stdout=subprocess.PIPE, shell=True)
Run Code Online (Sandbox Code Playgroud)
这个问题是它打开了一个新窗口,我需要的所有数据都丢失了.也许有办法不打开另一个窗口或保存新窗口的输出?
subprocess.check_output('powershell Invoke-Command {cmd.exe -ArgumentList "/c netstat -nb"}', stdout=subprocess.PIPE, shell=True)
Run Code Online (Sandbox Code Playgroud)
这个我在同一个窗口输出,但我没有高程,所以我没有得到任何结果...也许有一种方法获得提升而不打开一个新窗口左右?
谢谢你的帮助,希望我的问题很清楚.
我正在尝试编写一个需要 root 权限的 python 脚本。我曾尝试使用 elevate for python(据说它会显示一个对话框,要求输入 root 或“admin”密码),但是当我运行它时它给出了“没有这样的文件或目录”错误。
import os
from elevate import elevate
def is_root():
return os.getuid() == 0
print("before ", is_root())
elevate()
print("after ", is_root())
Run Code Online (Sandbox Code Playgroud)
为什么会发生这种情况?是否有任何使用系统 GUI 的可行替代方案?
编辑:我将 Kubuntu 18 与 Python 3.6 一起使用,但我希望它也能在 Windows 上运行。
进一步编辑:
这是一个关于对话框的问题(对于基本/Windows 用户),而不是 TUI。
我已禁用UAC并在python中运行我的脚本.
command = "abcd.exe"
subprocess.Popen(command,stdout=subprocess.PIPE,stderr=subprocess.PIPE).communicate()
Run Code Online (Sandbox Code Playgroud)
此外,我将应用程序abcd.exe从其属性设置为以管理员身份运行.
然后我收到以下错误:
WindowsError:[错误740]请求的操作需要提升
打开特定目录的CMD后在python中执行CMD命令
\n\n使用 python 打开特定目录的 CMD。按照相同的顺序,必须使用 python 执行以下 CMD 命令。
\n\n第2步 :
\n\npy <filename> \xe2\x80\x93V <variant string> -p <path to the flash files>\nRun Code Online (Sandbox Code Playgroud)\n\n步骤1 :
\n\nimport os\nos.system("start cmd /K cd C:\\\\Users\\\\Desktop\\\\Folder\\\\File" )\nRun Code Online (Sandbox Code Playgroud)\n python ×9
cmd ×2
python-2.7 ×2
windows ×2
admin ×1
django ×1
elevation ×1
ipc ×1
linux ×1
permissions ×1
pipe ×1
powershell ×1
py2exe ×1
python-3.x ×1
rest ×1
root ×1
sockets ×1
uac ×1
windows-8 ×1