在Python中编写面向文本的命令行程序时,我经常想要读取命令行上传递的所有文件,或者(XOR)标准输入(如Unix cat,或Perl <>).所以,我说
if len(args) == 0: # result from optparse
input = sys.stdin
else:
input = itertools.chain(*(open(a) for a in args))
Run Code Online (Sandbox Code Playgroud)
这是Pythonic这样做的方式,还是我错过了图书馆的某些部分?
我需要将HTML转换为等效的Markdown结构化文本.
由于我使用PHP编程,有些人表示Markdownify可以完成这项工作,但不幸的是,代码没有更新,实际上它没有用.在sourceforge.net/projects/markdownify有一个"注意:不支持 - 你想维护这个项目吗?联系我!Markdownify是一个用PHP编写的HTML到Markdown转换器.看它是html2text.php的继承者,因为它有更好的设计,更好的性能和更少的角落情况."
根据我的发现,我只有两个不错的选择:
Python:Aaron Swartz的html2text.py
Ruby:Singpolyma的html2markdown.rb,基于Nokogiri
所以,从PHP,我需要传递HTML代码,调用Ruby/Python脚本并接收输出.
(顺便说一句,一个民众在这里提出了一个类似的问题("如何从php调用ruby脚本?"),但我的案例没有实用信息).
按照Tin Man的提示(下图),我得到了这个:
PHP代码:
$t='<p><b>Hello</b><i>world!</i></p>';
$scaped=preg_quote($t,"/");
$program='python html2md.py';
//exec($program.' '.$scaped,$n); print_r($n); exit; //Works!!!
$input=$t;
$descriptorspec=array(
array('pipe','r'),//stdin is a pipe that the child will read from
array('pipe','w'),//stdout is a pipe that the child will write to
array('file','./error-output.txt','a')//stderr is a file to write to
);
$process=proc_open($program,$descriptorspec,$pipes);
if(is_resource($process)){
fwrite($pipes[0],$input);
fclose($pipes[0]);
$r=stream_get_contents($pipes[1]);
fclose($pipes[1]);
$return_value=proc_close($process);
echo "command returned $return_value\n";
print_r($pipes);
print_r($r);
}
Run Code Online (Sandbox Code Playgroud)
Python代码:
#! /usr/bin/env python
import html2text
import …Run Code Online (Sandbox Code Playgroud) 我们在磁盘中有几个巨大的文件(大于RAM的大小).我想在python中逐行读取它们并在终端输出结果.我已经完成了[1]和[2],但我正在寻找不等到整个文件被读入内存的方法.
我将使用这两个命令:
cat fileName | python myScript1.py
python myScript2.py fileName
Run Code Online (Sandbox Code Playgroud)
可能重复:
你如何读取python中的stdin
什么是从命令行获取信息的最佳/最简单的方法.
例如,我将运行一堆shell脚本,它们返回:
200 SOLUTIONS_REVISION
or
400 SOLUTIONS_REVISION
Run Code Online (Sandbox Code Playgroud)
在我运行每个脚本之后.我需要在python中捕获这些"返回"的字符串作为字符串(以检查它是否通过(200)或失败(400).最好的方法是什么(我是一个完整的新的python和我的搜索似乎主要是返回命令行争论.
谢谢(最好也是python 2.x)
操作系统是 Redhat-clone Linux 发行版,我使用的是 python-2.x。
一般代码结构为:
# stuff is initialized
while True:
# read stuff from remote devices
# process data
# maybe do stuff, or maybe just watch
os.system("clear")
# display status of remote devices
time.sleep(1)
Run Code Online (Sandbox Code Playgroud)
我想让用户通过按各种键来驱动程序。例如“按 S 正常关闭远程设备,按 K 杀死,按 R 重新启动”。所有这些操作都需要在大循环内发生——我的伪代码中的“也许做些事情,或者只是看”注释。如果没有按下任何键,程序应该一直循环。
我不确定如何在 while True: time.sleep(1) 循环的上下文中完成键盘阅读。
所以我有一个程序,在"主"过程中我触发一个新的Process对象(我想要的)是从STDIN读取行并将它们附加到Queue对象.
基本上,基本的系统设置是有一个"命令获取"过程,用户将输入命令/查询,我需要将这些查询提供给在不同进程中运行的其他子系统.我的想法是通过其他系统可以读取的多处理队列来共享这些.
我所拥有的(专注于获取命令/查询)基本上是:
def sub_proc(q):
some_str = ""
while True:
some_str = raw_input("> ")
if some_str.lower() == "quit":
return
q.put_nowait(some_str)
if __name__ == "__main__":
q = Queue()
qproc = Process(target=sub_proc, args=(q,))
qproc.start()
qproc.join()
# now at this point q should contain all the strings entered by the user
Run Code Online (Sandbox Code Playgroud)
问题是我得到:
Process Process-1:
Traceback (most recent call last):
File "/usr/lib/python2.7/multiprocessing/process.py", line 258, in _bootstrap
self.run()
File "/usr/lib/python2.7/multiprocessing/process.py", line 114, in run
self._target(*self._args, **self._kwargs)
File "/home/blah/blah/blah/blah.py", line 325, in sub_proc
some_str = raw_input("> …Run Code Online (Sandbox Code Playgroud) 我正在使用zbarimg扫描条形码,我想将输出重定向到 python 脚本。如何重定向以下命令的输出:
zbarimg code.png
Run Code Online (Sandbox Code Playgroud)
python 脚本,脚本应该是什么样的?
我尝试了以下脚本:
#!/usr/local/bin/python
s = raw_input()
print s
Run Code Online (Sandbox Code Playgroud)
我通过发出以下命令将其设为可执行文件:
chmod +x in.py
Run Code Online (Sandbox Code Playgroud)
比我跑了以下:
zbarimg code.png | in.py
Run Code Online (Sandbox Code Playgroud)
我知道这是错的,但我想不出其他的办法了!
我想将图像对象从我的 c# 项目传递给我的 python 脚本,但是根据我的理解,无论参数中有什么,它都被认为是字符串,而且当我尝试type(passedImage)在 python 中时,它会将它标识为字符串,即使我尝试放置一个数字而不是图像变量。
ProcessStartInfo start = new ProcessStartInfo();
start.FileName = @"C:\Python\Python36\python.exe";
start.Arguments = string.Format("{0} {1}", @"C:\OCRonImage2.py", image );
start.UseShellExecute = false;
start.RedirectStandardOutput = true;
start.CreateNoWindow = true;
using (Process process = Process.Start(start))
{
}
Run Code Online (Sandbox Code Playgroud) 可能的重复:
你如何从 python 中的 stdin 读取
大家好,
我是python的新手。我想知道如何从标准输入中获取数据,例如 c++ 中的 getline 等,以便从终端/控制台我可以使用文本文件作为 python 脚本的输入。
谢谢
我正在为 Unity 游戏制作 Q-Learning 机器人,机器人使用 Python,游戏使用 C#,如何让两个程序交换任何类型的数据(即整数字符串数组等)?任何使 Python 和 C# for Unity 通信的方法都可以解决我的问题,我可以将任何内容集成到我的代码中。
编辑:另一个问题和我的一样,但答案并没有从 Python 方面解释要做什么。
我的 Python 版本是 3.6。