ชื่อพาธของไดรฟ์ที่เมาท์แล้ว โดยใช้สคริปต์ python ที่ทำงานบน Tomcat

ฉันมีสคริปต์หลามต่อไปนี้ซึ่งเรียกผ่านคลาสจาวา มันทำงานได้ดีกับชื่อไฟล์ในเครื่อง ('D:\temp\Test.pdf') แต่เมื่อชื่อไฟล์คือ \serverA\f$\dir\Test.pdf ก็จะส่งกลับค่าเท็จเสมอ มันกำลังทำงานบนเซิร์ฟเวอร์ Tomcat (ด้วยสิทธิ์ผู้ดูแลระบบ) และเซิร์ฟเวอร์ A ไดรฟ์ f ถูกเมานต์บนเครื่องเซิร์ฟเวอร์ Tomcat มีความคิดเห็นเกี่ยวกับสิ่งที่ฉันอาจหายไปหรือไม่?

def checkFileExists(filename):

        vFile = File(filename)
        if (vFile == None):
            return False
        return vFile.exists()

person user2119684    schedule 28.02.2013    source แหล่งที่มา
comment
หากไฟล์อยู่ในไดรฟ์เครือข่าย ปัญหาจะลึกกว่าที่คิดเล็กน้อย ดู stackoverflow.com/questions/1271317/ นอกจากนี้ในอนาคตให้สังเกตฟังก์ชัน os.path.exists มาตรฐาน   -  person Zaur Nasibov    schedule 28.02.2013
comment
ขอบคุณสำหรับสิ่งนั้น แต่ฉันไม่มีความหรูหราในการทำแผนที่และเลิกทำแผนที่ขับเคลื่อนตัวเองบนระบบนั้น ไดรฟ์ที่มีไฟล์อยู่นั้นถูกแมปบนเซิร์ฟเวอร์ Tomcat น่าเสียดาย คุณบอกว่าไม่มีวิธีแก้ปัญหามาตรฐานสำหรับเรื่องนั้นเหรอ?   -  person user2119684    schedule 28.02.2013
comment
ว่าแต่เส้นทางคือ \serverA\... เหรอ? หรือว่ามันคือ \\serverA\...?   -  person Zaur Nasibov    schedule 28.02.2013
comment
มันคือ \\ServerA\f$ ดังนั้นจึงเป็นไดรฟ์ที่แมป (f:) บนเครื่องระยะไกล (serverA)   -  person user2119684    schedule 28.02.2013
comment
คุณช่วยกรุณาทำการทดสอบอีกครั้งด้วยบรรทัดคำสั่ง: IF EXIST \\serverA\$f\dir\Test.pdf ECHO '1' ได้ไหม แนวคิดคือการเปิดเครื่องมือ windows ภายในจาก Python และแยกวิเคราะห์ผลลัพธ์ :)   -  person Zaur Nasibov    schedule 28.02.2013
comment
มันคืนค่า '1' ดังนั้นจึงอยู่ตรงนั้น ฉันไม่เข้าใจความคิดของคุณ คุณช่วยระบุให้เจาะจงกว่านี้ได้ไหม ขอบคุณมาก   -  person user2119684    schedule 28.02.2013
comment
ดูคำตอบที่อัปเดต ฉันหวังว่ามันจะได้ผล :)   -  person Zaur Nasibov    schedule 28.02.2013


คำตอบ (1)


ตามที่กล่าวไว้ในความคิดเห็นต่อคำถาม การเข้าถึงการแชร์ Windows ใน Python เป็นเรื่องยากเล็กน้อย ดังนั้น วิธีแฮ็กในการตรวจสอบว่าไฟล์มีอยู่ในตำแหน่งระยะไกลที่ Python ไม่เข้าใจหรือไม่ แต่เครื่องมือของ Windows เข้าใจจะเรียกใช้เครื่องมือเหล่านี้และแยกวิเคราะห์ผลลัพธ์

ตัวอย่างเช่น:

import subprocess

def file_exists(path):        
    res = subprocess.check_output(['IF', 'EXIST', path, 'ECHO', "1"])
    return res.strip() == '1'

การใช้งาน:

path = r'\\serverA\f$\dir\Test.pdf'
print(file_exists(path))
person Zaur Nasibov    schedule 28.02.2013
comment
ขอบคุณสำหรับสิ่งนั้น มันใช้งานได้จริงในการหลอกหลามและตรวจสอบว่าไฟล์นั้นมีอยู่จริงหรือไม่ แต่ก็ยังฉันไม่ได้รับไฟล์นั้นเอง .. จุดประสงค์ของการดำเนินการทั้งหมดคือการย้ายไฟล์บางไฟล์จากตำแหน่งระยะไกลไปยังไดรฟ์ในเครื่อง . ดังนั้นปัญหาที่แท้จริงคือหลังจาก vFile=File(pathname), vFile เท่ากับ None และ vFile.exists() คืนค่า false.. คุณมีความคิดบ้างไหมว่าทำไมถึงเป็นเช่นนั้น? ขอบคุณอีกครั้ง - person user2119684; 28.02.2013
comment
เพียงใช้คำสั่ง xcopy ในทำนองเดียวกัน เช่น subprocess.call(['xcopy', source_path, dest_path]) - person Zaur Nasibov; 28.02.2013