我有一个脚本,首先创建一个文件夹(以i命名,for循环中的list元素)。然后我想使用 cd
并在其中运行wget命令。
但是,目前,wget命令在根文件夹中运行并下载那里的所有文件(而不是导航到该文件夹,然后下载其中的文件)
也许我必须在文件夹创建之前设置计时器或等待?如何修复此问题并在创建的文件夹中运行wget命令?
import os
lst = ['www.sr-line.com','www.montratec.com']
for i in lst:
print(i)
os.system('mkdir %s' % i)
os.system('cd %s' % i)
#os.system('mkdir test')
os.system('wget -A pdf -m -p -E -k -K -nd %s' % i)
os.system('cd ..')
4条答案
按热度按时间mbzjlibv1#
每个命令都在新的shell中执行,您需要将它们链接在一起:
dfty9e192#
在您的示例中,可以使用直接python操作,而不是为每个命令启动shell。这可以提供更具可读性和更快的代码。例如(有关详细信息,请参阅python标准库文档),linux上(未经测试的代码):
你甚至不需要用叉子
wget
命令(该程序甚至可能未安装)。。。您可以使用os.urllib中的工具请记住,启动一个新进程是一项成本相当高的操作(您的操作系统可能会在这方面失败:在linux上,请参阅fork(2)、syscalls(2)、errno(3)…)
wmvff8tz3#
可以在一个字符串中运行put多个命令,字符串之间用
;
.如果comands需要使用参数,那么您应该只使用一个参数
%
具有所有值的列表/元组或者你应该使用
.format()
```os.system('mkdir {} ; cd {} ; wget -A pdf -m -p -E -k -K -nd {} ; cd ..'.format(i, i, i))
编辑:
最终,您可以单独创建每个命令,然后将它们连接起来——使用list会更简单
如果你想使用它,它是有用的
if/else
跳过某些元素顺便说一句:
此方法对于在单个命令中添加或跳过参数也很有用
j2cgzkjk4#
跑步
system()
将启动一个新流程。该进程所做的不会影响父进程,因此那里的目录更改不会影响其他任何进程,包括由同一父进程启动的同级进程。告诉我
wget
在影响性能的流程中,在何处存储内容或执行目录更改wget
,例如父母。