Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/291.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 bash中每个命令行的文本文件_Python_Arrays_Bash_Text - Fatal编程技术网

Python bash中每个命令行的文本文件

Python bash中每个命令行的文本文件,python,arrays,bash,text,Python,Arrays,Bash,Text,好的,我有一个pythonscript,它接受这样一个论点 & ./myscript.py argumentishere 你要做的是读取一个包含多行文本的文本文件,并对每行执行我的命令,如下所示 & ./myscript.py line1 & ./myscript.py line2 & ./myscript.py line3 ect.ect.ect 如何在bash脚本中实现这一点虽然可以通过bash脚本实现,但更简单的方法可能是使用xargs实用程序 xarg

好的,我有一个pythonscript,它接受这样一个论点

& ./myscript.py argumentishere
你要做的是读取一个包含多行文本的文本文件,并对每行执行我的命令,如下所示

& ./myscript.py line1
& ./myscript.py line2
& ./myscript.py line3
ect.ect.ect

如何在bash脚本中实现这一点虽然可以通过bash脚本实现,但更简单的方法可能是使用
xargs
实用程序

xargs -L 1 ./myscript.py <inputfile
xargs-L 1./myscript.py您尝试过这个吗

while IFS= read -r line; do
    ./myscript.py "$line"
done < file
而IFS=read-r行;做
./myscript.py“$line”
完成<文件

您还需要添加
#/usr/bin/env python
在myscript.py的头部,chmod executable property为myscript.py

如果我是你,我会修改python脚本以文件名作为参数,并对每一行执行我想要的操作

import sys
file = open(sys.argv[1])
for line in file:
    #do your thing here

你的Python脚本是接受多个参数还是希望整行都是一个参数?哦,天哪,这是在bash中逐行解析文件最糟糕的方法之一。(更糟糕的是为
使用
)。@gniourf\u gniourf:为什么这种方式如此糟糕?@CharlesBailey,因为它在子shell中执行
while
循环,并使用不必要的外部
cat
。bash方式为:读取时
;做完成
,如其他答案所示。(注意,问题已标记)。@gniourf_gniourf:除非python脚本很简单,输入只有很少几行,否则公平地说,我不会认为这些因素中的任何一个都会产生很大影响。@CharlesBailey这不是产生影响的问题。。。这只是一个知道如何正确地做事的问题,这样每次你做的时候,你都会不假思索地把事情做好。毫无顾忌地做事的问题在于,这个代码片段很快就会变长,在某个点上,
while
循环中会定义一些变量,您会看到奇怪的结果(因为这个循环在子shell中)。。。哦,天哪,要是你从一开始就做得好就好了。正如我在你的个人资料中注意到的那样,你喜欢编程,所以你至少应该理解一点我的意思。
#!/bin/bash

cat input | while read line
do
    ./myscript.py $line
done
import sys
file = open(sys.argv[1])
for line in file:
    #do your thing here