Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.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
使用bash修改python脚本并使用更改执行它_Python_Bash - Fatal编程技术网

使用bash修改python脚本并使用更改执行它

使用bash修改python脚本并使用更改执行它,python,bash,Python,Bash,我有一个python脚本,它是一个命令行界面。我从将输出保存在txt文件中的bash脚本执行它: #!/bin/bash for ... in ... do echo "Foo:$foo" echo "Bar:$bar" ./pythonScript.py --argument1 "arg" # make changes done 我要做的是修改python脚本的一行,并再次执行它,同时更改新行,直到for循环完成 我想更改的python脚本中的代码类

我有一个python脚本,它是一个命令行界面。我从将输出保存在txt文件中的bash脚本执行它:

#!/bin/bash

for ... in ...
do
    echo "Foo:$foo"
    echo "Bar:$bar"
    ./pythonScript.py --argument1 "arg"
    # make changes
done    
我要做的是修改python脚本的一行,并再次执行它,同时更改新行,直到for循环完成

我想更改的python脚本中的代码类似于:

QUERY = 'www.foo.com' + '/bar?' \
        + '&title=%(title)s' \
        + '&start=0' \
        + '&num=%(num)s'
每次执行for循环时,查询的
start
参数必须增加20个单位。因此,在执行5次之后,
start
应该是100


有没有办法做到这一点?

您需要的只是一个循环

start = 0

for i in range(5)
    QUERY = 'www.foo.com' + '/bar?' + 
            '&title=%(title)s' +
            '&start=' + start +
            '&num=%(num)s'
    print(QUERY)
    start += 20

正如多条评论已经建议的那样,不要这样做。更改Python脚本,使其接受第二个参数。动态修改代码既脆弱又复杂,标准的解决方案是将要更改的内容参数化

QUERY = 'www.foo.com' + '/bar?' \
        + '&title=%(title)s' \
        + '&start=%(start)i' \
        + '&num=%(num)s'
然后像这样运行循环

start=0
for ... in ...
do
    echo "Foo:$foo"
    echo "Bar:$bar"
    ./pythonScript.py --argument1 "arg" --start "$start"
    ((start += 20))  # bash only
done    

你为什么不能把它作为python脚本的第二个参数来实现?你为什么不能用python做所有事情?MatsLindh No,这样做完全可以做到way@M.T我在bash中一直在做这件事,现在我不能改变它。你真的应该打那个想出从bash生成Python代码想法的人的屁股:-)你可能有一些项目限制,阻止你现在修复Python代码,但在这种情况下,你可以向负责人指出,这是一种技术债务,在未来往往需要更多的努力才能解决。就像一棵不需要的树,只要它小,你就想把它砍倒。