我在一个文件中有一些命令,我在python中读取并使用subprocess.Popen执行。运行splitlines()方法时,生成的行数取决于终端屏幕的宽度。该文件中的命令是:Python拆分结果根据终端屏幕大小而变化?
CREATE EXTERNAL TABLE tableforview (name string, dob string) STORED AS PARQUET LOCATION 'location';
有文件中没有换行;它全部输入一行。
hivep = subprocess.Popen("beeline -u 'connectionstring' --force=true --outputformat=csv2 --showWarnings=false -f hivetest", stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
(output, err) = hivep.communicate()
hivequeryList = []
hivequery = ""
for line in output.splitlines():
print(line)
但是,当我逐行打印splitlines()方法的输出时,根据终端屏幕的大小,我得到两行或三行。
我正在阅读拆分成字典。所以我期望的是字典的关键字包含整个创建查询以及包含结果的值。但正在发生的事情是查询被截断,像这样
{"CREATE EXTERNAL TABLE tableforview (name string, dob string) STORED AS PARQUE" : "T LOCATION 'location';"}
而在这取决于我的终端屏幕有多宽是截止发生变化的位置。
我不知道为什么我的终端屏幕宽度应该从文件读取时重要。希望有任何见解。
可能有一些环境变量决定了终端宽度,因此您打开的进程可能会尝试根据这些进程格式化它的输出。也许在使用'Popen'时尝试使用'stdout ='和'stdin ='参数? –
您可以发布预期的输出和实际正在打印的内容吗? –
我在Popen中使用stdout和stdin参数。发布预期的输出。 – covfefe