<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ko">
	<id>https://devcafe.co.kr/w/index.php?action=history&amp;feed=atom&amp;title=%ED%8C%8C%EC%9D%B4%EC%8D%AC_%ED%8C%8C%EC%9D%BC%EB%B3%B5%EC%82%AC_%EC%9E%90%EB%8F%99%EC%8A%A4%EC%BC%80%EC%A4%84%EB%9F%AC</id>
	<title>파이썬 파일복사 자동스케줄러 - 편집 역사</title>
	<link rel="self" type="application/atom+xml" href="https://devcafe.co.kr/w/index.php?action=history&amp;feed=atom&amp;title=%ED%8C%8C%EC%9D%B4%EC%8D%AC_%ED%8C%8C%EC%9D%BC%EB%B3%B5%EC%82%AC_%EC%9E%90%EB%8F%99%EC%8A%A4%EC%BC%80%EC%A4%84%EB%9F%AC"/>
	<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/index.php?title=%ED%8C%8C%EC%9D%B4%EC%8D%AC_%ED%8C%8C%EC%9D%BC%EB%B3%B5%EC%82%AC_%EC%9E%90%EB%8F%99%EC%8A%A4%EC%BC%80%EC%A4%84%EB%9F%AC&amp;action=history"/>
	<updated>2026-05-17T09:43:12Z</updated>
	<subtitle>이 문서의 편집 역사</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://devcafe.co.kr/w/index.php?title=%ED%8C%8C%EC%9D%B4%EC%8D%AC_%ED%8C%8C%EC%9D%BC%EB%B3%B5%EC%82%AC_%EC%9E%90%EB%8F%99%EC%8A%A4%EC%BC%80%EC%A4%84%EB%9F%AC&amp;diff=73&amp;oldid=prev</id>
		<title>Devcafe: 새 문서: {{틀:고지상자 |제목= 분마다 자동 실행되는 파일 복사 |내용=# 프로그램 설명 ## C:\DEV에 있는 .torrent 파일을 D:\로 복사 하는 프로그램 ## 프로그램을 트레이에 숨기는 기능  ## .ini 파일에서 수정하는 항목 ### 소스/타겟 디렉토리 수정 ### 확장자명 수정 ### 자동수행시간 간격(분)  }}  &lt;source lang=python&gt; import os  from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QGridLayout, QWidget...</title>
		<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/index.php?title=%ED%8C%8C%EC%9D%B4%EC%8D%AC_%ED%8C%8C%EC%9D%BC%EB%B3%B5%EC%82%AC_%EC%9E%90%EB%8F%99%EC%8A%A4%EC%BC%80%EC%A4%84%EB%9F%AC&amp;diff=73&amp;oldid=prev"/>
		<updated>2024-10-04T15:51:48Z</updated>

		<summary type="html">&lt;p&gt;새 문서: {{틀:고지상자 |제목= 분마다 자동 실행되는 파일 복사 |내용=# 프로그램 설명 ## C:\DEV에 있는 .torrent 파일을 D:\로 복사 하는 프로그램 ## 프로그램을 트레이에 숨기는 기능  ## .ini 파일에서 수정하는 항목 ### 소스/타겟 디렉토리 수정 ### 확장자명 수정 ### 자동수행시간 간격(분)  }}  &amp;lt;source lang=python&amp;gt; import os  from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QGridLayout, QWidget...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;새 문서&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{틀:고지상자&lt;br /&gt;
|제목= 분마다 자동 실행되는 파일 복사&lt;br /&gt;
|내용=# 프로그램 설명&lt;br /&gt;
## C:\DEV에 있는 .torrent 파일을 D:\로 복사 하는 프로그램&lt;br /&gt;
## 프로그램을 트레이에 숨기는 기능 &lt;br /&gt;
## .ini 파일에서 수정하는 항목&lt;br /&gt;
### 소스/타겟 디렉토리 수정&lt;br /&gt;
### 확장자명 수정&lt;br /&gt;
### 자동수행시간 간격(분) &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import os&lt;br /&gt;
&lt;br /&gt;
from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QGridLayout, QWidget, QCheckBox, QSystemTrayIcon, \&lt;br /&gt;
    QSpacerItem, QSizePolicy, QMenu, QAction, QStyle, qApp&lt;br /&gt;
from PyQt5.QtCore import QSize, QTime, QTimer&lt;br /&gt;
import logging&lt;br /&gt;
import shutil&lt;br /&gt;
import configparser&lt;br /&gt;
&lt;br /&gt;
class MainWindow(QMainWindow):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
         Сheckbox and system tray icons.&lt;br /&gt;
         Will initialize in the constructor.&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    check_box = None&lt;br /&gt;
    tray_icon = None&lt;br /&gt;
&lt;br /&gt;
    # Override the class constructor&lt;br /&gt;
    def __init__(self):&lt;br /&gt;
        try:&lt;br /&gt;
            # Be sure to call the super class method&lt;br /&gt;
            QMainWindow.__init__(self)&lt;br /&gt;
&lt;br /&gt;
            self.config = self.getConfig()[&amp;#039;DEFAULT&amp;#039;]&lt;br /&gt;
&lt;br /&gt;
            # 1분 마다 실행&lt;br /&gt;
            self.timer = QTimer(self)&lt;br /&gt;
            self.timer.start(1000 * 60 * int(self.config[&amp;#039;SYNC_MIN&amp;#039;]))    # 1/1000 * 60초 * 1 = 1분마다&lt;br /&gt;
            # self.timer.start(1000)    # 1/1000 * 60초 * 1 = 1분마다&lt;br /&gt;
            self.timer.timeout.connect(self.timeout_min)&lt;br /&gt;
&lt;br /&gt;
            self.setMinimumSize(QSize(280, 80))  # Set sizes&lt;br /&gt;
            self.setWindowTitle(&amp;quot;윈도우 자동 스케줄러&amp;quot;)  # Set a title&lt;br /&gt;
            central_widget = QWidget(self)  # Create a central widget&lt;br /&gt;
            self.setCentralWidget(central_widget)  # Set the central widget&lt;br /&gt;
&lt;br /&gt;
            grid_layout = QGridLayout(self)  # Create a QGridLayout&lt;br /&gt;
            central_widget.setLayout(grid_layout)  # Set the layout into the central widget&lt;br /&gt;
            grid_layout.addWidget(QLabel(&amp;quot; 파일 자동복사 스케줄러 &amp;quot;, self), 0, 0)&lt;br /&gt;
&lt;br /&gt;
            # Add a checkbox, which will depend on the behavior of the program when the window is closed&lt;br /&gt;
            self.check_box = QCheckBox(&amp;#039;트레이에 숨기기&amp;#039;)&lt;br /&gt;
            grid_layout.addWidget(self.check_box, 1, 0)&lt;br /&gt;
            grid_layout.addItem(QSpacerItem(0, 0, QSizePolicy.Expanding, QSizePolicy.Expanding), 2, 0)&lt;br /&gt;
&lt;br /&gt;
            # Init QSystemTrayIcon&lt;br /&gt;
            self.tray_icon = QSystemTrayIcon(self)&lt;br /&gt;
            self.tray_icon.setIcon(self.style().standardIcon(QStyle.SP_ComputerIcon))&lt;br /&gt;
&lt;br /&gt;
            &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
                Define and add steps to work with the system tray icon&lt;br /&gt;
                show - show window&lt;br /&gt;
                hide - hide window&lt;br /&gt;
                exit - exit from application&lt;br /&gt;
            &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
            show_action = QAction(&amp;quot;보이기&amp;quot;, self)&lt;br /&gt;
            quit_action = QAction(&amp;quot;Exit&amp;quot;, self)&lt;br /&gt;
            hide_action = QAction(&amp;quot;숨기기&amp;quot;, self)&lt;br /&gt;
            show_action.triggered.connect(self.show)&lt;br /&gt;
            hide_action.triggered.connect(self.hide)&lt;br /&gt;
            quit_action.triggered.connect(qApp.quit)&lt;br /&gt;
            tray_menu = QMenu()&lt;br /&gt;
            tray_menu.addAction(show_action)&lt;br /&gt;
            tray_menu.addAction(hide_action)&lt;br /&gt;
            tray_menu.addAction(quit_action)&lt;br /&gt;
            self.tray_icon.setContextMenu(tray_menu)&lt;br /&gt;
            self.tray_icon.show()&lt;br /&gt;
        except Exception as e:&lt;br /&gt;
            l.info(e)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    def getConfig(self,inifile=&amp;#039;cron_config.ini&amp;#039;):&lt;br /&gt;
        config = configparser.ConfigParser()&lt;br /&gt;
        config.read(inifile)&lt;br /&gt;
&lt;br /&gt;
        return config&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    # Override closeEvent, to intercept the window closing event&lt;br /&gt;
    # The window will be closed only if there is no check mark in the check box&lt;br /&gt;
    def closeEvent(self, event):&lt;br /&gt;
        if self.check_box.isChecked():&lt;br /&gt;
            event.ignore()&lt;br /&gt;
            self.hide()&lt;br /&gt;
            self.tray_icon.showMessage(&lt;br /&gt;
                &amp;quot;트레이 프로그램&amp;quot;,&lt;br /&gt;
                &amp;quot;프로그램이 트레이에 최소화됩니다.&amp;quot;,&lt;br /&gt;
                QSystemTrayIcon.Information,&lt;br /&gt;
                2000&lt;br /&gt;
            )&lt;br /&gt;
&lt;br /&gt;
    &amp;#039;&amp;#039;&amp;#039; 시간별로 실행하는 스케줄러 &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
    def timeout_min(self):&lt;br /&gt;
        l.info(&amp;quot; Time  : &amp;quot; + QTime.currentTime().toString(&amp;quot;hh:mm:ss&amp;quot;))&lt;br /&gt;
        _filelist = os.listdir(self.config[&amp;#039;SRC_DIR&amp;#039;])&lt;br /&gt;
&lt;br /&gt;
        for item in _filelist:&lt;br /&gt;
            # some_string 이 파일 이름에 없을 경우 -1 을 반환&lt;br /&gt;
            if item.find(self.config[&amp;#039;SRC_FILE_EXT&amp;#039;]) is not -1:&lt;br /&gt;
                l.info(&amp;quot;item:&amp;quot; + item)&lt;br /&gt;
                shutil.move(self.config[&amp;#039;SRC_DIR&amp;#039;]+item,self.config[&amp;#039;TGT_DIR&amp;#039;])&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    import sys&lt;br /&gt;
    l = logging.getLogger(&amp;quot;my&amp;quot;)&lt;br /&gt;
    l.setLevel(logging.INFO)&lt;br /&gt;
    l.setLevel(logging.INFO)&lt;br /&gt;
    stream_hander = logging.StreamHandler()&lt;br /&gt;
    l.addHandler(stream_hander)&lt;br /&gt;
    l.info(&amp;quot;==== started logging ====&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    app = QApplication(sys.argv)&lt;br /&gt;
    mw = MainWindow()&lt;br /&gt;
    mw.show()&lt;br /&gt;
    sys.exit(app.exec())&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# 환경 파일(cron_config.ini)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
[DEFAULT]&lt;br /&gt;
# 소스디렉토리&lt;br /&gt;
SRC_DIR = D:\\DEV\\ &lt;br /&gt;
# 소스파일 확장자 &lt;br /&gt;
SRC_FILE_EXT = .torrent&lt;br /&gt;
# 타겟 디렉토리 &lt;br /&gt;
TGT_DIR = C:\\&lt;br /&gt;
# ?분마다 수행 &lt;br /&gt;
SYNC_MIN = 1&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:python]]&lt;/div&gt;</summary>
		<author><name>Devcafe</name></author>
	</entry>
</feed>