在Python模块中使用bash命令

在Python模块中使用bash命令,python,module,wget,Python,Module,Wget,我一直在尝试编写一个函数(要添加到模块中),其中需要在bash模式下使用“wget”命令。e、 g.我的职能中有这一行 href_aw = search_str_1 + collections[1]+ search_str_2 + str(RA) + '+' + str(Dec) + search_str_3 !wget -O url_list_dir/wise_allsky.dat "{href_aw}" --no-check-certificate 只要我在函数中有这个,它就可以正

我一直在尝试编写一个函数(要添加到模块中),其中需要在bash模式下使用“wget”命令。e、 g.我的职能中有这一行

href_aw =  search_str_1 + collections[1]+ search_str_2 + str(RA) + '+' +  str(Dec) + search_str_3 

!wget -O url_list_dir/wise_allsky.dat "{href_aw}" --no-check-certificate
只要我在函数中有这个,它就可以正常工作。我可以执行它并下载所需的文件。 当我在模块中复制粘贴我的函数并尝试调用它时,我收到一条错误消息

“文件 “/Users/aprakash/Library/enthund/Canopy/edm/envs/User/lib/python3.5/WISE_photometry_abhi.py”, 第67行

!wget-O url_list_dir/neo_wise.dat“{href_nw}”--无检查证书 ^SyntaxError:无效语法“

所以,在浏览了一些互联网(stackoverflow)后,我将wget命令改为follow

import os 
os.system("wget -O url_list_dir/wise_allsky.dat '{href_aw}' --no-check-certificate")
但这将返回一个空文件。有没有办法解决这个问题?请注意,我不能使用python wget模块和这样的命令

wget.download(mask_3b, out = img_dir)
因为它不允许我必须使用诸如“-no check certificate”之类的关键字

我不明白,如果某个函数工作得很好,怎么会只因为它是从模块调用的而给出一个错误。我想重复一次,如果我在编写它的同一脚本中使用该函数,那么第一个命令可以正常工作

谢谢你的帮助!
Abhi

可能尝试子流程而不是os.system,因此如下所示:

import subprocess
bashCommand = "wget -O url_list_dir/wise_allsky.dat '{href_aw}' --no-check-certificate"
process = subprocess.Popen(bashCommand.split(), stdout=subprocess.PIPE)
output, error = process.communicate()

我找到了另一种方法。使用“请求”、“io”和“熊猫”可以在几行中完成上述任务。感谢所有的评论,虽然,他们是有用的,我甚至没有听说过“请求”


请将您的代码作为代码(
{}
图标)而不是报价。首先,为什么您不能使用
请求
,而不是直接发送到
wget
?其次,即使您需要
wget
,为什么您需要bashshell而不是直接调用
wget
?而且,不管怎样,为什么要使用
os.system
而不是
subprocess.run
?同时,你还期待什么呢
!wget-O url\u list\u dir/wise\u allsky.dat“{href\u aw}”--没有检查证书要做什么?Python没有任何类型的
用于运行命令的语法。此外,只需将
{href_aw}
放入字符串文字中不会导致任何类型的替换;您需要使用f字串(在字串文字前加上
f
),或在字串上调用
format\u map
format
,或执行某些操作。@abarnert向wget发送命令?我正在接触的网站建议使用“wget”作为API。“你期望什么?”我得到一个输出文件,它看起来像一个TSV,包含大量信息。就像我说的,这在函数中很好用。“另外,仅将{href_aw}放入字符串文字不会导致任何类型的替换?”这允许我将变量字符串“href_aw”放入wget命令中,而我无法直接执行此操作。这是有效的,不确定你的“!”评论是否有效,因为它也有效。好吧,你还没有告诉我们你在使用哪个网站,所以任何人都无法阅读他们在那里说的话。但与此同时,其他问题呢?
import requests
import pandas as pd
import io
href_aw =  search_str_1 + collections[1]+ search_str_2 + str(RA) + '+' +  str(Dec) + search_str_3 
r_aw  = requests.get(href_aw)
df_aw = pd.read_csv(io.StringIO(r_aw.text))   
df_aw.to_csv(url_list_dir+'wise_allsky.dat')