我想编译一个使用Python的C程序,并且想要使用“<”运算符给出输入,但它不能按预期工作。 如果我编译C程序并通过给它输入一个文件来运行它,例如使用Python子进程调用C编译器命令
./a.out <inp.txt works
但同样,如果我尝试使用Python脚本来做到这一点,它没有像预期的那样工作。 例如:
import subprocess
subprocess.call(["gcc","a.c","-o","x"])
subprocess.call(["./x"])
和
import subprocess
subprocess.call(["gcc","a.c","-o","x"])
subprocess.call(["./x","<inp.txt"])
两个脚本询问虽然终端输入。但我认为在第二个脚本中它应该从文件中读取。为什么这两个程序都是一样的?
有“没有错,使用shell为了方便”?你会这么想,但如果例如用户设置IFS?或者,因为上面给gcc的调用没有指定完整路径,PATH?如果可以避免的话,最好不要使用shell来运行。 – alastair
@alastair:'$ IFS'或'$ PATH'只能从你正在执行的shell命令中改变(临时);看我的更新如何创建shell实例,并让我知道如果你仍然担心修改后的环境(我可能会错过一些东西)。也就是说,如果您还需要支持Windows(除非您故意只使用足够简单的命令以在两种平台类型上工作),那么避免shell的一个有说服力的理由是。 – mklement0
根据'subprocess'文档,除非明确指定环境,否则它是从Python进程继承的。如果某人可以操纵* that *过程的环境,它仍可能导致不需要的行为。 – alastair