2013-05-27 15 views
13

Şu anda yürütülen dosya dizini nasıl edinilir Bazı siteyi kontrol etmek ve JSON verilerini bir dosyaya yazmak için CasperJS kullanıyorum. Dosya public/data klasörüne yazılmalıdır. Ancak proje dizinimden (örneğin, ev dizinim) casperjs'u aramayı denediğimde, dosyamı doğrudan proje dizinimde değil, ~/public/data'da yazıyor.CasperJS

Bunu nasıl çözmeliyim? __dirname veya __filename nasıl elde edemedim.

+0

Do: Eğer tam yol olarak proje üzerinde ayarlayabilirsiniz Temelde

Üzerinde çalıştığınız örnek kodunuz var mı? – imjared

+0

Merhaba, InviS. Bu yeterince cevaplandırıldı mı? Bunun üzerine bir cevap yazacak kadar nazik olabilir misiniz? Teşekkür ederim! – Morgon

cevap

2

phantomJS'nin FileSystem modülünü kullanabilirsiniz.

CasperJS, PhantomJS üzerinden yapıldığı için, Phantom modüllerini CasperJS Komut Dosyalarınızın içine ekleyebilirsiniz.

Dene:

19

here Bu tam sorunu vardı FileSystem Modülü hakkında

//require a reference to the fs module 
var fs = require('fs'); 
... 
//changes the current workingDirectory to the specified path. 
fs.changeWorkingDirectory('/your/path') 

Tüm belgeler; Komut dosyasının yaşadığı yere göre bir dosyada dosya gerektirir. (Okuyun: bir sürü) biraz ile müdahalesi, şu üretmek mümkün oldu: Bu göreli yolları kullanarak fs.read() ve spawn dosyalara beni tanır

// Since Casper has control, the invoked script is deep in the argument stack 
var currentFile = require('system').args[3]; 
var curFilePath = fs.absolute(currentFile).split('/'); 

// I only bother to change the directory if we weren't already there when invoking casperjs 
if (curFilePath.length > 1) { 
    curFilePath.pop(); // PhantomJS does not have an equivalent path.baseName()-like method 
    fs.changeWorkingDirectory(curFilePath.join('/')); 
} 

. Belki de require() da test etmek için modülüm yoktu.

Umut bu yararlıdır!

+0

'Requi' ('system') 'hakkında bilgi sahibi değildi.' – Deviljho

+2

'Bu açıkça şunu gerektirir: var fs = require (' fs '); ' –

2

Çözümümün:

var system = require('system') 
var absoluteFilePath = system.args[4]; 
var absoluteFileDir = absoluteFilePath.replace('{your_file_name}', ''); 

sistem args kontrol etmek için: Belirli bir casperjs 4 argümanlarla çağrı için

console.log(system.args) 
0

Sen bir cevap verin. genel çözümü absoluteFilePath olarak son argüman almaktır

var system = require('system') 
var absoluteFilePath = system.args[system.args.length-1]; 
var absoluteFileDir = absoluteFilePath.replace('{your_file_name}', ''); 
+0

Ayarımda, absoluteFilePath'in sistemdeki son dizin olduğunu görmüyorum .args. Aksine, bana 4. öğe gibi görünüyor –

1

Kullanmak ihtiyacınız olan tek şey phantomjs fs:

var fs = require('fs'); 
console.log(fs.workingDirectory); 
// output "F:/path/to/your/project"