简短版本(如果你可以回答短版本它为我做的工作,其余的主要是为了其他有类似任务的人的利益):
在Windows的python中,我想创建2个文件对象,附加到同一个文件(它不必是硬盘上的实际文件),一个用于读取,一个用于写入,如果读取结束试图读取它永远不会得到EOF(它会阻止直到写入内容).我认为在linux中os.mkfifo()可以完成这项工作,但在Windows中它并不存在.可以做些什么?(我必须使用文件对象).
一些额外的细节:我有一个python模块(不是我写的)通过stdin和stdout(使用raw_input()和print)播放某个游戏.我也有一个Windows可执行文件,通过stdin和stdout播放相同的游戏.我想让他们一对一玩,并记录他们所有的沟通.
这是我可以编写的代码(该get_fifo()函数未实现,因为这是我不知道做的Windows):
class Pusher(Thread):
def __init__(self, source, dest, p1, name):
Thread.__init__(self)
self.source = source
self.dest = dest
self.name = name
self.p1 = p1
def run(self):
while (self.p1.poll()==None) and\
(not self.source.closed) and (not self.source.closed):
line = self.source.readline()
logging.info('%s: %s' % (self.name, line[:-1]))
self.dest.write(line)
self.dest.flush()
exe_to_pythonmodule_reader, exe_to_pythonmodule_writer =\
get_fifo()
pythonmodule_to_exe_reader, pythonmodule_to_exe_writer =\
get_fifo()
p1 = subprocess.Popen(exe, shell=False, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
old_stdin = sys.stdin
old_stdout = sys.stdout
sys.stdin = exe_to_pythonmodule_reader
sys.stdout = pythonmodule_to_exe_writer
push1 = Pusher(p1.stdout, exe_to_pythonmodule_writer, p1, '1')
push2 …Run Code Online (Sandbox Code Playgroud) 我有以下escript:
#!/usr/bin/env escript
%%! -name test_starter@127.0.0.1
main(_) ->
NodeName = test,
Host = '127.0.0.1',
Args = "",
{ok, _Node} = slave:start_link(Host, NodeName, Args),
io:format("Node started successfully!").
Run Code Online (Sandbox Code Playgroud)
在Ubuntu 10.04上运行时,我得到了这个:
$ ./start_slave
Node started successfully!
$
Run Code Online (Sandbox Code Playgroud)
我想安装自己的Erlang(最新版本,调试透析器编译文件等),因为在Ubuntu上安装Erlang缺少一些功能.我把我的Erlang二进制文件放在里面~/Applications/bin.启动Erlang通常可以工作,并且在Erlang shell中启动从属节点也可以正常工作.
但是,现在我的escript不起作用.大约60秒后它返回一个错误:
$ ./start_slave
escript: exception error: no match of right hand side value {error,timeout}
Run Code Online (Sandbox Code Playgroud)
即使我将第一行更改为escript以使用我的erlang版本,它仍然无效:
#!/home/user/Applications/bin/escript
Run Code Online (Sandbox Code Playgroud)
从属节点启动时erlang:open_port/2似乎正在使用调用,而该调用sh又不会读取我.bashrc设置自定义PATH环境变量的文件.slave:start_link/3等待从节点响应时似乎发生超时,但它从未发生过.
如何在Ubuntu 10.4上滚动我自己的Erlang安装并在escripts中启动slave节点?
更新:我试图将路径添加到我的自定义Erlang里面/etc/environment(PATHUbuntu 中的原始设置),但这不会改变任何东西......
更新2:接受给出的唯一答案(即使它没有解决问题).Ubuntu和Erlang版本现在有点老了,这可能不再是问题了.
我的服务器上有一个文本文件.我想从我的Android应用程序中打开文本文件,然后在TextView中显示文本.我找不到任何如何与服务器进行基本连接并将数据提供给String的示例.
您可以提供的任何帮助将不胜感激.
当我通过用最新版本覆盖它来更新客户服务器上运行的ASP.NET网站[注意:它不是Web应用程序]时,它会将所有用户关闭.
我希望能够在不启动用户的情况下提供新版本的网站 - 有没有办法尽量减少用户被开除的机会?[除了显而易见的等待低使用时间]
如果我从InProc转移到会话状态,我想这可能会有所作为 - 但还有其他方法吗?
通过扩展类Vector,Java的设计者能够快速创建类Stack.这种继承使用的负面影响是什么,特别是对于类Stack?
非常感谢.
ASP.NET 4.0 SQL会话状态机制是否与会话状态的ASP.NET 2.0架构向后兼容,还是应该/我们必须为ASP.NET 4.0应用程序创建一个单独且不同的会话状态数据库?
无论如何我倾向于后者,但2.0数据库似乎只是工作,但我想知道在2.0和4.0版本的ASP.NET之间ASPState数据库模式/过程之间是否存在任何实质性差异.谢谢.
我正在尝试使用bash脚本将文件复制到当前目录.
为了处理需要转义的路径,使用了一个转义变量然后提供给cp命令的变量.
cp命令抱怨:
usage: cp [-R [-H | -L | -P]] [-fi | -n] [-apvX] source_file target_file
cp [-R [-H | -L | -P]] [-fi | -n] [-apvX] source_file ... target_directory
Run Code Online (Sandbox Code Playgroud)
我知道这意味着什么,但我无法理解为什么会这样.
这是代码:
z="/a/b/c d (e) f.txt"
y=`printf %q "$z"`
cp $y x.txt # not working as expected
echo cp $y x.txt # output is "cp /a/b/c\ d\ \(e\)\ f.txt x.txt"
Run Code Online (Sandbox Code Playgroud) 我需要一个Bash(或一个普通的shell)脚本来放入一个cronjob,每分钟检查一下Internet是否正常运行.
我就这样做了:
#! /bin/sh
host1=google.com
host2=wikipedia.org
curr_date=`date +"%Y%m%d%H%M"`
echo -n "${curr_date};"
((ping -w5 -c3 $host1 || ping -w5 -c3 $host2) > /dev/null 2>&1) &&
echo "up" || (echo "down" && exit 1)
Run Code Online (Sandbox Code Playgroud)
你会怎么做?你会ping哪个主机?
澄清:
通过" 互联网上升 ",我的意思是我的互联网连接.
通过" up ",我的意思是拥有可用的连接(如果我们正在谈论DNS正在关闭或者连接真的很慢,那么这并不重要[请注意-w超时]).这也是我没有包含任何IP而只包含主机的原因.
我还应该ping Stack Overflow吗?我的意思是,如果我无法访问谷歌,维基百科或Stack Overflow,我不想要互联网:p
我有一个Python脚本,需要计算以任意字体显示的任意字符串的确切大小,以生成简单的图表.我可以轻松地使用Tkinter.
import Tkinter as tk
import tkFont
root = tk.Tk()
canvas = tk.Canvas(root, width=300, height=200)
canvas.pack()
(x,y) = (5,5)
text = "yellow world"
fonts = []
for (family,size) in [("times",12),("times",24)]:
font = tkFont.Font(family=family, size=size)
(w,h) = (font.measure(text),font.metrics("linespace"))
print "%s %s: (%s,%s)" % (family,size,w,h)
canvas.create_rectangle(x,y,x+w,y+h)
canvas.create_text(x,y,text=text,font=font,anchor=tk.NW)
fonts.append(font) # save object from garbage collecting
y += h+5
tk.mainloop()
Run Code Online (Sandbox Code Playgroud)
结果似乎取决于Python和/或系统的版本:
在Ned Batchelder提到它之后,我发现字体的大小因平台而异.只要你坚持与自己保持一致的Tkinter,它可能不是一个交易破坏者.但我的整个程序并没有使用Tkinter的来执行实际的绘图:它只是依靠其字体大小计算,以产生一个输出(在SVG或Python脚本被发送到Nodebox).事情就是这样:
mocodo的输出http://grab.by/grabs/f67b951d092dd1f4f490e1469a53bca2.png
(请查看实际大小的 …