在UNIX我能够传递sys.stdin到select.selectPython中.我试图在Windows上执行此操作,但select.select在Windows上的Python将不允许它.
为了更准确地描述我在做什么,请参阅https://github.com/eldarion/gondor-client/blob/ccbbf9d4b61ecbc2f66f510b993eb5fba0d81c09/gondor/run.py.
该unix_run_poll功能是我想在Windows上完成的功能.基本的想法是我有一个到服务器的套接字连接,它已经将stdin,stdout,stderr连接到远程运行的进程,我正在从本地客户端与它进行交互,并使其看起来好像本地客户端正在运行处理.
这win32_run_poll是我尝试将其移植到Windows,它确实有效.这有点不稳定,IMO的做法非常糟糕.
有没有人就如何改进这方面提出建议?对win32api的依赖程度不太理想,但我可以保留它.
Pinax开发过程中出现的一个问题是处理外部应用程序的开发版本.我试图提出一个不涉及引入版本控制系统的解决方案.原因是我不必在我的系统上安装所有可能的版本控制系统(或强制在贡献者身上)并处理在环境创建期间可能出现的问题.
采取这种情况(了解Pinax如何工作将有助于理解):
我们正在开发新版Pinax.以前的版本有一个pip需求文件,其中设置了显式版本.我们希望解决的外部应用程序出现错误.要在Pinax中修复该错误,当前的过程就是在假设我们控制应用程序的情况下简单地发布应用程序的次要版本.我们无法控制的应用程序,我们只是处理应用程序作者的发布周期或强制他们发布版本;-)我不太喜欢不断发布修复错误的小版本,因为在某些情况下我想成为同时致力于应用程序的新功能.当然,分支旧版本是我们的工作,然后根据需要进行后向移植.
我很想听听有关这方面的一些想法.
我正在尝试编写一个方法,它将返回一个可以满足json.Marshaler接口的函数.我的理由是提供结构的不同表示.也许我接近这完全错了.
func (api *Api) SiteList(c *gin.Context) {
var sites []db.Site
if err := api.db.Find(&sites).Error; err != nil {
}
var payload []json.Marshaler
for _, site := range sites {
payload = append(payload, site.ToApi())
}
c.JSON(http.StatusOK, payload)
}
Run Code Online (Sandbox Code Playgroud)
我从这个函数得到的结果是列表中正确的项目数,但每个项的值相同:
[
{
"key": "NZ7LCA9HQN3",
"name": "autumn-waterfall-1573"
},
{
"key": "NZ7LCA9HQN3",
"name": "autumn-waterfall-1573"
},
{
"key": "NZ7LCA9HQN3",
"name": "autumn-waterfall-1573"
},
{
"key": "NZ7LCA9HQN3",
"name": "autumn-waterfall-1573"
},
{
"key": "NZ7LCA9HQN3",
"name": "autumn-waterfall-1573"
}
]
Run Code Online (Sandbox Code Playgroud)
最后,这是ToApi实现:
type EncoderFunc func() ([]byte, error) …Run Code Online (Sandbox Code Playgroud)