在子进程 (shell=False) 中使用外部源(例如:xml 文件)的文件名之前,通常的做法是什么?
更新:在发送一些解析后的字符串之前,我想进行一些基本的安全检查。给定的示例在远程模式下使用 mpg123(命令行音频播放器)来播放声音文件。
filename = child.find("filename").text # e.g.: filename = "sound.mp3"
pid = subprocess.Popen(["mpg123"],"-R"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
command = "L "+filename+"\n"
pid.stdin.write(command.encode())
Run Code Online (Sandbox Code Playgroud) 我正在使用一个Rfid Reader(一个小型的usb棒),它在Debian Linux(Squeeze)上模仿HID键盘.
在扫描rfid标签的那一刻,-f/dev/input/event2在屏幕上给了我一堆乱码.通过使用evdev Python库(http://bit.ly/kZkO2b),我实际上可以正确解码字符串.
但我想我正在咆哮错误的树.这似乎太复杂了.如果rfid阅读器像HID键盘一样工作,我应该能够通过使用sys.stdin等基本功能来访问它,对吗?那怎么做得好呢?
我正在使用一个线程从流(/ dev/tty1)读取字符串,同时处理主循环中的其他内容.我想在按CTRL-C时Thread与主程序一起终止.
from threading import Thread
class myReader(Thread):
def run(self):
with open('/dev/tty1', encoding='ascii') as myStream:
for myString in myStream:
print(myString)
def quit(self):
pass # stop reading, close stream, terminate the thread
myReader = Reader()
myReader.start()
while(True):
try:
pass # do lots of stuff
KeyboardInterrupt:
myReader.quit()
raise
Run Code Online (Sandbox Code Playgroud)
通常的解决方案 - run()循环中的布尔变量 - 在这里不起作用.推荐的解决方法是什么?
我可以设置守护进程标志,但之后我将无法使用quit()方法,这可能在以后证明是有价值的(做一些清理).有任何想法吗?