通过zenity打开文件并逐个处理

时间:2015-04-30 11:59:17

标签: bash load zenity

我想使用此脚本按zenity打开5个文件,但每个文件将分别处理(通过" do")。有可能吗?

FILES=($(zenity --file-selection --multiple --title "Pick a file"))

    for i in "$FILES"
    do
    fastx_quality_stats -i $i -o ${i%.fastq}quality.txt 
    bash /home/fil/Desktop/Pipeline_MISEQ/fastq_quality_boxplot_graph.sh -i ${i%.fastq}quality.txt -o ${i%fastq}quality_distribution.png
    bash fastx_nucleotide_distribution_graph.sh -i ${i%.fastq}quality.txt -o ${i%.fastq}distribuiton_nucleotides.png
    mv *quality.txt *.png fastq_stat/  
    done    

2 个答案:

答案 0 :(得分:1)

问题是文件名之间的默认分隔符似乎是from __future__ import division import sys,os from PyQt4 import QtGui, QtCore, uic # Used to create and modify PyQt4 Objects. from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas # Used in creating the plots and graphs. from matplotlib.figure import Figure class ParentCanvas(FigureCanvas): """Ultimately, this is a QWidget (as well as a FigureCanvasAgg, etc.).""" def __init__(self, parent=None, width=5, height=4, dpi=100): fig = Figure(figsize=(width, height), dpi=dpi) fig.set_edgecolor('w') fig.set_facecolor('w') self.axes = fig.add_subplot(111) self.axes.hold(False) FigureCanvas.__init__(self, fig) self.setParent(parent) FigureCanvas.setSizePolicy(self, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding) FigureCanvas.updateGeometry(self) class PlotCanvas(ParentCanvas): """ Creates a matplotlib canvas QWidget inheriting the features set out in ParentCanvas.""" def compute_initial_figure(self): self.axes.set_xbound(lower=0, upper=1) self.axes.set_ybound(lower=0, upper=1) self.axes.set_ylabel('Best Fitness Function') self.axes.set_xlabel('Population') class Main(QtGui.QMainWindow): def __init__(self, parent=None): super(Main, self).__init__(parent) uic.loadUi('Test.ui', self) self.SignalsAndSlots() self.firstrun = True self.iter=0 def SignalsAndSlots(self): # Function setting up the signals and slots. self.btnStopOpt.clicked.connect(self.clickStop) self.btnRun.clicked.connect(self.clickRun) def clickStop(self): # Function that runs when the "Stop" button is clicked. self.firstrun = True self.iter =0 self.gb.setParent(None) def clickRun(self): # Function that runs when the "Run Optimization" button is clicked. if self.firstrun == True : #graph setup self.gb = PlotCanvas(self.Graph1Widget, width=10, height=7, dpi=70) self.gb.axes.set_ylabel('Objective Value') self.gb.axes.set_xlabel('Generation') self.Graph1Layout.addWidget(self.gb) self.firstrun = False self.UpdateGraph(self.iter) self.iter+=1 def UpdateGraph(self, iter): # Function that creates a graph best = [0,0,0,3,5,9,12,30] average = [0,0,0,1,2,3,14,20] t = range(iter+1) # Will be used to store the generation numbers. s = best[:iter+1] # Will be used to store the global best values. self.gb.axes.hold(True) # Holds the graph so we can plot the global best and average scores as two separate scatter plots on to one graph. self.gb.axes.scatter(t, s, c='b', label='Best objective value') if iter == 0: # In the first generation we need to make a legend for the graph, this only need to be made once. self.gb.axes.legend(loc='upper center', bbox_to_anchor=(0.5, 1.09), fancybox=True, shadow=True, ncol=5) # Legend content is determined by the labels above. Location is determined by bbox_to_anchor. self.gb.axes.autoscale_view(True,False,True) self.gb.draw() return if __name__ == '__main__': app = QtGui.QApplication(sys.argv) window = Main(None) # instantiation app.setActiveWindow(window) window.show() # show window sys.exit(app.exec_()) # Exit from Python (至少在我的机器上),所以你必须使用|选项才能直接使用结果:

--separator

答案 1 :(得分:0)

尝试这种方式(注意--separator参数):

#! /bin/bash

OLDIFS="$IFS"
IFS='-'
FILES=($(zenity --file-selection --multiple --separator='-' --title "Pick a file"))
IFS="$OLDIFS"

for file in "${FILES[@]}"
do
    echo $file
done

参考:https://askubuntu.com/questions/579948/can-simple-scripts-use-gui-file-manager-to-select-file