我需要将我在工作文件夹中创建的最后一个.csv文件的名称传递给csv2sql脚本。
我可以使用这个吗?
ls -t *.csv | head -1
获得输出作为参数?
python csv2sql.py -t products last_created_file.csv > sql.output
如果我尝试:
python csv2sql.py -t products ls -t *.csv | head -1 > sql.output
我明白了:
csv2sql.py: error: argument csvFile: can't open 'ls': [Errno 2] No such file or directory: 'ls'
答案 0 :(得分:0)
您会收到错误消息,因为bash不会将ls -t *.csv | head -1
视为命令,而是将其视为python命令的参数(因此,每个单词都会成为一个参数,例如:args [2]为'ls' ,args [3]将是'-t'等。
要解决此问题,您可以将ls -t *.csv | head -1
的输出保存为变量,然后将该变量保存为bash文件并执行,然后将其传递给python命令:
#!/bin/bash
output=$(ls -t *.csv | head -1)
python csv2sql.py -t products $output | head -1 > sql.output
请注意,我目前无法访问我的linux计算机,并且无法测试任何东西,因此我假设ls -t *.csv | head -1
命令可以执行您想要的操作。
上面给出的解决方案也不是很整洁,因为它同时使用了bash和python,因此我个人建议研究subsystem module并将其用于全python解决方案。
答案 1 :(得分:0)
这是一个外壳问题。反引号是用于将命令行输出解释为另一个命令行的单个arg的通用语法。对于我认为您正在做的事情,它将显示为:
python csv2sql.py -t products `ls -t *.csv | head -1` > sql.output
这将
ls
命令head
python
python
的标准输出转移到sql.output