我想用几句话来完成的是:更改目录并从shell调用脚本。
到目前为止,我已经设法用os.chdir()
更改了目录。
但是我无法理解如何语法化给定任务的第二部分。
具体来说,我要调用的命令就是这个
/path-to-dir-of-the-script/script<inputfile.txt>outfile.txt
至少我的眼睛问题是输入文件(显然是不存在但将由脚本生成的输出文件)位于两个不同的目录中。
因此,通过尝试以下(ls
和print
或多或少用于调试和监督目的)以及各种修改,我总是会收到错误。 SyntaxError或系统无法找到这两个文件等。
import subprocess
import os
import sys
subprocess.call(["ls"]) #read the contents of the current dir
print
os.dir('/path-to-dir')
subprocess.call(["ls"])
print
in_file = open(infile.txt) #i am not sure if declaring my files is a necessity.
out_file = open (outfile.txt)
com = /path-to-dir-of-the-script/script
process = subprocess.call([com], stdin=infile.txt, stdout=outfile.txt)
这是最后一次生成:NameError: name
infile is not defined
我确信我的方法中存在多个错误(除了我的语法之外),我可能还需要学习更多。到目前为止,我已经查看了doc,其中包括一些Popen
示例以及两个或三个相关问题here,here和here。
如果我没有清楚地说明一些注意事项:
脚本和文件不在同一级别。该命令是有效的,并且在它涉及到它时可以完美无缺。移动文件,将脚本移动到同一级别将不起作用。
有什么建议吗?
答案 0 :(得分:2)
使用引号在Python中创建一个字符串,例如:
com = "/path-to-dir-of-the-script/script"
您可以使用cwd
参数来运行具有不同工作目录的脚本,例如:
subprocess.check_call(["ls"]) # read the contents of the current dir
subprocess.check_call(["ls"], cwd="/path-to-dir")
模拟bash命令:
$ /path-to-dir-of-the-script/script < inputfile.txt > outfile.txt
使用subprocess
模块:
import subprocess
with open("inputfile.txt", "rb") as infile, open("outfile.txt", "wb") as outfile:
subprocess.check_call(["/path-to-dir-of-the-script/script"],
stdin=infile, stdout=outfile)