Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 无法通过subprocess.Popen运行shell脚本_Python_Python 3.x - Fatal编程技术网

Python 无法通过subprocess.Popen运行shell脚本

Python 无法通过subprocess.Popen运行shell脚本,python,python-3.x,Python,Python 3.x,我正在尝试使用python子流程运行脚本run.sh 该脚本创建一个csv文件和一个state.json文件 这是脚本(从终端运行时工作正常): 但是当我尝试从python运行相同的代码时,它显示了正确的输出,但没有创建csv文件和state.json文件 这是python代码 #!/usr/bin/python3 import subprocess from ast import literal_eval import io import os from subprocess impo

我正在尝试使用python
子流程运行脚本
run.sh

该脚本创建一个
csv文件
和一个
state.json
文件

这是脚本(从终端运行时工作正常):

但是当我尝试从python运行相同的代码时,它显示了正确的输出,但没有创建
csv文件和
state.json文件

这是python代码

#!/usr/bin/python3

import subprocess   
from ast import literal_eval
import io
import os
from subprocess import call

shellscript = subprocess.Popen(["/home/anti/Documents/bq_s3/run.sh"], stdout=subprocess.PIPE)
shellscript.wait()
print (shellscript.returncode)

输出

INFO Sending version information to singer.io. To disable sending anonymous usage data, set the config parameter "disable_collection" to true
INFO Running query:
    SELECT start_date,trip_seconds,trip_miles FROM `testbq-305217.test_1.tablename` WHERE 1=1 AND datetime '2013-01-01 00:00:00.000000' <= CAST(start_date as datetime) AND CAST(start_date as datetime) < datetime '2013-01-02 00:00:00.000000' ORDER BY start_date LIMIT 100
INFO METRIC: {"type": "counter", "metric": "record_count", "value": 1, "tags": {"endpoint": "test_bq"}}
INFO Syncing stream:test_bq
0
INFO将版本信息发送到singer.io。要禁用发送匿名使用数据,请将配置参数“disable_collection”设置为true
运行查询的信息:

从“testbq-305217.test_1.tablename”中选择开始日期、行程秒数、行程英里数,其中1=1和日期时间“2013-01-01 00:00:00.000000”,正如您在评论中提到的,因为问题是当前工作目录未正确设置,请将
cwd
参数传递到
子流程.Popen
。更好的方法是,按照文档中的建议,使用更高级别的函数替换
subprocess.Popen()

#!/usr/bin/python3

import subprocess   

shellscript = subprocess.call(["/home/anti/Documents/bq_s3/run.sh"], cwd=YOUR_WORKING_DIR)
print(shellscript)

打开
set-x
时,您会看到什么?在哪里执行此操作?在
Popen
内部发现问题,文件是在
home
目录中创建的,而不是在cwd中创建的。如何更改输出路径?您可以在脚本内部执行显式的
set-x
,也可以修改
Popen
,使其有效地运行命令
bash-x run.sh
,而不是简单的
run.sh
。我建议您在一个新问题中问这个问题,因为这与Python或bash不再相关,但是要正确使用
目标csv
。因此,这个问题应该转到而不是。问题是输出文件是在主目录中创建的,而不是在
cwd
中创建的。输出路径需要更改为
cwd
,无论如何,我可以在脚本中执行此操作?您实际上可以将
cwd
传递给subprocess.Popenthat worked man..谢谢..编辑您的答案,以便我可以接受它
#!/usr/bin/python3

import subprocess   

shellscript = subprocess.call(["/home/anti/Documents/bq_s3/run.sh"], cwd=YOUR_WORKING_DIR)
print(shellscript)