<p>从您尝试的解决方案中可以很明显地看出,您是Python的新手,但实际上在使用<code>subprocess</code>库方面取得了相当惊人的进展,因此我相信您会发现随着时间的推移,您会做得更好。通常一个问题似乎很难解决,因为您根本不知道可用工具的所有可用功能。在本例中,您似乎使用了<code>head</code>,因为您知道可以强迫您做您想做的事情,但我相信您会同意这不是一个舒适的解决方案。在</p>
<p>处理任何需要19个参数的过程都很困难——命令变得相当难以理解,而且在编写它们时出错也更容易。数据驱动的方法,即在文本文件中描述如何分割文件,可能更容易处理。然后您可以编写一个程序,读取该描述并利用它来分割文件。由于Python可以非常容易地读写文件,因此您应该发现根本不需要使用shell脚本,这将使您的解决方案更易于移植。在</p>
<p>如果我正确理解了您的shell脚本,那么每个<code>head</code>命令从第十九个(!)中命名的文件中获取一定数量的字节参数并将其写入指定的文件。所以您可以使用包含表单行的数据文件布局</p>
<pre><code>N filename
</code></pre>
<p>其中N是要进行测试的行数,我在<code>task_description.txt</code>中创建了以下文件。在</p>
^{pr2}$
<p>就像你的程序一样(如果我没弄错的话),指定的60字节之后的任何字节都将被忽略。所以现在我可以编写一个程序<code>so15.py</code>,它读取任务描述并处理一些数据文件,这些文件在第一个命令行参数中命名,因此:</p>
<pre><code>import sys
in_file = sys.argv[1]
with open("task_description.txt") as td, open(in_file, "rb") as inf:
for line in td:
n, file_name = line.split()
with open(file_name, "wb") as out_file:
out_file.write(inf.read(int(n)))
print("Wrote", n, "bytes to", file_name)
</code></pre>
<p>然后我使用一个包含超过60个字节的数据文件运行这个文件,这个文件来自Python发行版的<code>Misc/NEWS</code>文件,使用以下命令</p>
<pre><code>python so15.py /Users/sholden/Projects/Python/cpython/Misc/NEWS
</code></pre>
<p>它给出了输出</p>
<pre><code>Wrote 10 bytes to file1.txt
Wrote 20 bytes to file2.txt
Wrote 30 bytes to file3.txt
</code></pre>
<p>作为检查,我运行了命令</p>
<pre><code>wc -l file*.txt
</code></pre>
<p>结果如下</p>
<pre><code> 0 1 10 file1.txt
2 4 20 file2.txt
2 6 30 file3.txt
4 11 60 total
</code></pre>
<p>希望你能适应这一点,以解决你的问题相当容易。在</p>