2013-04-24 3 views
3

사용자로부터 스크립트를 읽고 QProcess을 호출하여 해당 스크립트를 파일으로 전달해야합니다.QProcess에서 QTemporaryFile을 사용하는 것이 안전합니까?

예를 들어, 사용자는 파이썬 스크립트

import sys 
print(sys.copyright) 

, 말,이를 삽입하고 난 파일에 해당 스크립트를 넣어, 그 파일을 사용하여 파이썬 인터프리터를 호출해야합니다.

QTemporaryFile을 사용하려고 생각했는데 그 파일은 프로세스를 시작할 때만 제공되기 때문에 열어 둘 필요가 없습니다.

질문 : QTemporaryFile을 열어 무언가를 쓰고 그 파일을 프로세스에 전달하면 (무한정 계속됩니다) 임시 파일을 파괴 할 수 있습니까? 프로세스에서 해당 파일이 다시 필요할 경우 어떻게해야합니까? 프로세스가 파일을 열어두면 어떻게 될까요?

프로세스에 의해 열린 상태로 유지되면 아무런 문제가 발생하지 않을 것입니다. 아마도 QTemporaryFile은 경로의 연결을 해제하지만 데이터는 여전히 메모리에 액세스 할 수 있습니다.

그러나 프로세스가 파일을 다시 열려고하면 어떻게됩니까? 여기

예로서 조각

QString script = QInputDialog::getText(blah); 
QTemporaryFile tmp; 
if (tmp.open()) { 
    tmp.write(script.toUtf8()); 
    QStringList params; 
    params << tmp.fileName(); 
    QProcess *proc = new QProcess("/usr/bin/python3"); 
    proc->start(params); 
} 

답변

3

'autoRemove'플래그 (기본적으로 설정되어 있음)의 경우, QTemporaryFile의 인스턴스가 존재하는 한 QTemporaryFile이 존재합니다. 따라서 원래 제시 한 코드에서 tmp가 범위를 벗어나면 파일이 제거됩니다. 객체에서 열기/닫기를 호출해도 파일은 삭제되지 않습니다.

QTemporaryFile * pTmp = new QTemporaryFile을 사용하여 파일을 동적으로 할당 한 다음 나중에 파이썬 스크립트가 끝났을 때이를 삭제할 수 있습니다.

1

아야는, 난 그냥 QTemporaryFileautoRemove 플래그를 지적 (즉시 썼다). 나는 이것이 해결책이 될 수 있다고 생각한다 : false으로 설정하면 파일이 디스크에서 제거되지 않으므로 파일을 다시 사용할 수있다.

임시 파일은 시스템의 기본 위치에 저장해야합니다. 따라서 파일을 재부팅 할 때까지 제거하지 않아야합니다 (적어도 Linux는 이러한 방식으로 작동한다고 생각합니다).

이것은 아이디어 일 뿐이며 다른 답변이나 확인을 기다리게됩니다.